目前需求是同时添加2条数据库记录,这2个记录分别添加到A数据库表和B数据库表中 我的A数据库表:
我的B数据库表:
我在网上查到如下的代码:
我的代码像下面这么写,为什么添加的是正确数据他直接回滚了啊?麻烦大家了~~~~~
代码开始:不知道为什么前2行不自动识别为代码
sequelize.transaction(function (t) { return BoxInfoController.addInfo(function (a,result) {
}, {transaction:t})
.then(function(){
return BoxInfoController.addOa(function (a,result) {}, {transaction:t})
});
}).then(function (results){
/* 操作成功,事务会自动提交 */
}).catch(function(err){
/* 操作失败,事件会自动回滚 */
});
… … 看写法 好像BoxInfoController.addInfo()和addOa()中单独开了事务而已 比较好奇你执行的时候callback是什么了…
@MUHM 不好意思,我这其实还不能很好的理解回调函数,你的意思是我把2个函数里的事物处理都去掉么?还是把2个方法合并成一个方法啊?
@axetroy 你的意思是我把2个函数里的事物处理都去掉么?还是把2个方法合并成一个方法啊?我不是特别懂啊?麻烦帮我解惑下 谢谢
现在看到回调就头大,不知道是不是应该这么写
add: function(addBoxInfo, callback) {
return _dbManage.transaction(function (t) {
return BoxInfoModel.create(addBoxInfo, { transaction: t })
.then(function (boxInfo) {
return BoxOaModel.create(addBoxInfo, { transaction: t })
.then(function (boxOa) {
return 'result'; //这里自己写需要的数据
});
});
}).then(function (result) {
callback(null, result);
}).catch(function (err) {
callback(err);
});
}
然后执行
BoxInfoController.add(addBoxInfo,function(err,result){
//
});
@MUHM 十分感谢,我现在也是,一在node.js里写for循环套数据库操作我就抓狂
@iori2882 把node升级了用async/await 吧
用async/await,大概这样写: sequelize.transaction(async t => { await BoxInfoModel.create(addBoxInfo, { transaction: t }) await BoxOaModel.create(addBoxInfo, { transaction: t }) })
可以自己加try catch
或者是用promise写
谢谢大家的回复~