0

我正在使用 nodejs 联系谷歌数据存储。这是我的代码:

dataset.runInTransaction(function(transaction, done,err) {
                    // From the `transaction` object, execute dataset methods as usual.
                    // Call `done` when you're ready to commit all of the changes.

                    transaction.save(entities, function(err) {


                        if(err){
                            console.log("ERROR TRNASCTION");
                            transaction.rollback(done);
                            return;
                        }else{
                            console.log("TRANSACTION SUCCESS!");
                            done();
                        }

                    });


                });

如果保存不成功,我希望事务回滚,如果是,我希望它提交。我面临的问题是它们似乎都没有运行,只是控制台上没有输出。没有任何东西被发送到我的数据库,所以我假设至少'if(err)'条件会运行,但它不会。我是 glcoud 的新手,所以我不确定我是否在这里做错了什么?我正在关注https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.26.0/datastore/transaction?method=save上的文档。

4

1 回答 1

1

在事务的上下文中,该save方法实际上不需要回调。你想保存的东西会排队,直到你打电话done()。调用done将提交事务。

然后,您可以在传递给的第二个函数中处理来自提交操作的错误runInTransaction。有关示例,请参见https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.26.0/datastore/dataset?method=runInTransaction

--

只是提到这一点,因为它与回滚部分有关:https ://github.com/GoogleCloudPlatform/gcloud-node/issues/633——在解决该问题之前,我们正在等待升级到 Datastore 的 API。

于 2015-12-16T20:27:22.057 回答