【问题标题】:capture err in gcloud-node transaction捕获 gcloud-node 事务中的错误
【发布时间】:2016-08-07 19:46:41
【问题描述】:

我正在尝试捕获交易错误。我有以下代码应该会导致错误,因为这些实体已经存在,但控制台中没有输出任何内容:

        datastore.runInTransaction(function(transaction, done) {


          transaction.save([
            {
              key: my_key1,
              method: 'insert',
              data: {
                stuff: 'stuff'
              }
            },
            {
              key:  my_key2,
              method: 'insert',
              data: {
                stuff: 'stuff'
              }
            }
          ]);


          console.log('here');
          done(function(err, data) {
            if (err) {
                console.log('err : ' + err);
                transaction.rollback();
               return;
            }
            console.log('no error');
            return;
          });


        });

});

【问题讨论】:

    标签: node.js google-app-engine google-cloud-datastore gcloud-node


    【解决方案1】:

    done 没有收到回调。将该回调作为runInTransaction 的第二个参数。

    var cachedTransaction;
    datastore.runInTransaction(function(transaction, done) {
      cachedTransaction = transaction;
    
      transaction.save([
        {
          key: my_key1,
          method: 'insert',
          data: {
            stuff: 'stuff'
          }
        },
        {
          key:  my_key2,
          method: 'insert',
          data: {
            stuff: 'stuff'
          }
        }
      ]);
    
      done();
    }, function(err) {
      if (err) {
        console.log('err : ' + err);
        cachedTransaction.rollback();
        return;
      }
    
      console.log('no error');
    });
    

    注意:我们正在为此开发更好的 API:https://github.com/GoogleCloudPlatform/gcloud-node/issues/633

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2016-11-28
      • 2019-11-25
      • 1970-01-01
      • 2014-10-25
      • 2019-02-08
      相关资源
      最近更新 更多