【发布时间】:2014-05-22 07:54:31
【问题描述】:
我得到了正确的输出,实际上,这两个操作被视为一个事务单元;如果一个失败,两个都失败。
在这个代码示例中:我正在做一个交易
(1) 插入 (2) 更新
我的方法是将我的数据库操作嵌套在 .then 中。 我的问题是这段代码是否偶然正确?我对 promises 和 knex 不熟悉。
knex.transaction(function(t) {
knex('foo')
.transacting(t)
.insert({id:"asdfk", username:"barry", email:"barry@bar.com"})
.then(function() {
knex('foo')
.where('username','=','bob')
.update({email:"bob@foo.com"})
.then(t.commit, t.rollback)
})
})
.then(function() {
// it worked
},
function() {
// it failed
});
这行得通,但我觉得我仍然做错了什么。正在寻找 cmets。
【问题讨论】:
-
您可以尝试 1) 在
// it worked和// it failedcmets 所在的位置添加一些 console.logs,以及 2) 以某种方式强制插入语句失败吗?使用您当前的嵌套,仅在更新失败时调用 t.rollback,所以我想如果插入失败,它不会做正确的事情。
标签: database node.js transactions promise