2

ノード orm2 で (postgresql を使用して) トランザクション プラグインを使用する方法に問題があるようです。トランザクションが非同期関数呼び出しでどのように機能するかを誤解していると思います。これが私のコードの例です:

function(row){
  db.transaction(function(err, txn){
    if(err){ return console.log(err) };       
    row.property = 'foo';

    row.save(function(err){
      if(err){ return console.log(err) };
      console.log("saved");
    });

    txn.commit(function(err){
      if(err){ return console.log(err) };
      console.log("committed");
    });
  });

このコードを実行すると、console.log の出力が次のように表示されることがあります。

"committed"
"saved"

これは、私が予想した順序の逆です。行に加えた変更はデータベースに保存されません。ここで非同期関数呼び出しに問題があるようですが、ノード orm2 トランザクション プラグインのドキュメントに従っていただけです。

誰が私が間違っているのか知っていますか? ありがとう!

4

1 に答える 1

1

これはうまくいくはずです。

function(row){
  db.transaction(function(err, txn){
  if(err){ return console.log(err) };       
  row.property = 'foo';

  row.save(function(err){
    if(err){ return console.log(err) };
    console.log("saved");
    txn.commit(function(err){
      if(err){ return console.log(err) };
      console.log("committed");
    });
  });
});
于 2014-01-13T08:49:25.090 に答える