2017-04-06 6 views
0

私はnodejsを全く新しくしました。このサンプルコードでconnection.beginTransaction();を使用してエラー処理に関する専門知識をお伺いしたいと思います。このサンプルコードでNodeJS - connection.rollback()はasync.parallelとどのように動作しますか

connection.beginTransaction(function(){ 
    async.parallel([ 
     function(callback){ 
      connection.query('INSERT INTO SUBJECT.PROJECT (Name, Score) VALUES (?,?)', 
          ['Drake', '85'] 
          , function(error){ 
           //if(error) 
           // connection.rollback(); 
           callback(error); 
          }); 
     }, 
     function(callback){ 
      connection.query(someUpdateQuery, someValues, 
          function(error){ 
           //if(error) 
           // connection.rollback();          
           callback(error); 
          }); 
     } 
    ], function(error){ 
      var msg; 
      if(error) { 
       connection.rollback(); 
       msg = 'Error! ' + error; 
      } 
      else { 
       connection.commit(); 
       msg = 'Success'; 
      } 
      res.json(msg); 
    }); 

}); 
  • 、これはなんとかですか?
  • すべてconnection.queryはif(error)connection.rollback()は、私が代わりに connection.rollback()を処理するために、各 connection.queryにconnection.rollback()を削除し、最後の関数に依存することができたのか? - それはすべてロールバックされます(言います) 10クエリ関数を挿入すると、5番目の1がエラーを受け取りました。
  • 申し訳ありませんが、よく分かりません。読んでいただきありがとうございます

答えて

0

正しいですか?個々のクエリのロールバックステートメントを削除し、async.parallelコールバックのステートメントに依存してください。

connection.beginTransaction(function() { 
    async.parallel([ 
    function (callback) { 
     connection.query('INSERT INTO SUBJECT.PROJECT (Name, Score) VALUES (?,?)', 
     ['Drake', '85'] 
     , callback); 
    }, 
    function (callback) { 
     connection.query(someUpdateQuery, someValues, callback); 
    } 
    ], function (error) { 
    var msg; 
    if (error) { 
     connection.rollback(); 
     msg = 'Error! ' + error; 
    } 
    else { 
     connection.commit(); 
     msg = 'Success'; 
    } 
    res.json(msg); 
    }); 
}); 

あなたは、最終的なコールバックでconnection.commit()を呼び出すまでのコマンドの非がデータベースにコミットされますので、これは動作します:あなたのコードは次のようになります。あなたが見てみたいことは、commitrollbackのメソッドが非同期であるかどうかです。つまり、コールバックを渡すことを期待しています。そうであれば、コードはそのままres.jsonの前に実行され、の前にトランザクションがコミットまたはロールバックされます。

+0

おはようございます@MrWillihog、ご返信ありがとうございます。試行錯誤の時間を節約できます。あなたが言ったように、私は 'commit'と' rollback'メソッドを使う方法についてもっと深く見ていきます。 –

関連する問題