在dataset.runInTransaction
(link)的示例中,transaction.get(key,callback)
上发生了明确的错误处理。
但是对于其他操作,例如transaction.save(entity)
或transaction.delete(key)
,没有回调,所以真的没办法处理错误。例如:
dataset.runInTransaction(function(transaction, done) {
transaction.save({
key: dataset.key(['Company', 123]),
data: {}
});
transaction.delete(dataset.key(['Company', 456]));
done();
}, function(err, apiResponse) {});
这是否意味着不需要显式回滚事务?
答案 0 :(得分:1)
我也在尝试查找相同的问题,但发现以下问题很有帮助。
答案 1 :(得分:0)
我在问题跟踪器上与gcloud-node
个贡献者进行了大量的反复讨论:
基本上所有的编辑都是在同一时间完成的(一旦done()
被调用),所以如果有任何失败,整个交易将在那时中止。
令人困惑的是,像transaction.get()
这样的某些操作确实有回调。基本上,transaction.get()
返回的实体版本需要与.save()
或.delete()
之前的版本匹配(如果版本调用done()
,则会再次发生)如果不匹配,交易将自动中止。
transaction.rollback()
调用中的内容与您的代码所期望的内容不匹配,则使用.get()
仍然有用。