使用nodejs的gcloud数据存储区事务问题

时间:2015-12-16 19:03:55

标签: node.js transactions google-cloud-datastore gcloud-node

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

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(错误)'条件会运行,但事实并非如此。我是glcoud的新手,所以我不确定我在这里做错了什么?我正在https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.26.0/datastore/transaction?method=save跟踪文档。

1 个答案:

答案 0 :(得分: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 - 在解决该问题之前,我们正在等待升级到数据存储区的API。