1

dataset.runInTransaction(リンク)の例では、 で発生する明示的なエラー処理があります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) {});

これは、トランザクションを明示的にロールバックする必要がないということですか?

4

2 に答える 2

1

私も同じ問題を調べようとしていましたが、以下の質問が役に立ちました。

こちらをご覧ください

于 2016-01-24T14:17:27.760 に答える
0

gcloud-node私は課題トラッカーで貢献者と何度もやり取りしました。

  1. https://github.com/GoogleCloudPlatform/gcloud-node/issues/1120
  2. https://github.com/GoogleCloudPlatform/gcloud-node/issues/633

基本的にすべての編集は同時に行わdone()れるため (呼び出されると)、いずれかが失敗すると、その時点でトランザクション全体が中止されます。

紛らわしいのは、一部の操作にtransaction.get()はコールバックがあることです。基本的に、によって返されるエンティティのバージョンは、 orが発生するtransaction.get()前のバージョンと一致する必要があります (これは、 が呼び出されたときに発生します) バージョンが一致しない場合、トランザクションは自動的に中止されます。.save().delete()done()

transaction.rollback()呼び出しの何かが.get()コードが期待するものと一致しない場合でも、使用は役立ちます。

于 2016-02-11T20:44:54.003 に答える