2016-03-23 8 views
-1

私はnode-mysqlライブラリでnodejsで実行するSQLクエリを持っています。最初の関数との残りの部分でNodejsはforループがmysqlクエリで終了するのを待ちます

sql.query(query, function(err, rows, field){ 
if (err) throw err; 
for(var i = 0; i < rows.length; i++) { 
    do_something_complicated(); 
} 
} 

私は(非同期ライブラリを使用してみましたし、SQL:クエリを入れて):私はこのように、クエリの結果にループの実行したい

2番目の関数のコードですが、クエリが終了するのを待ちますが、forループは終了しません。

誰でも手助けできますか?

答えて

0

非同期ライブラリとそのeach機能を使用してみてください。

sql.query(query, function(err, rows, field) { 
    if (err) throw err; 
    async.each(rows, function(row, callback) { 
     do_something_complicated(); 
     // once finished call the callback 
     // no arguments or null if successful, else with the error 
     callback(); 
    }, function(err) { 
     // handle errors and do something after each row has been iterated 
    } 
} 

キー/インデックスが必要な場合は、代わりにforEachOfを使用してください。

+0

ありがとうございます! :) – xcept

0

実際にはあなたのコードはうまくいきます。forループの直後のすべてが両方の後に実行されなければなりません。クエリとループが実行されます。完全な文の後のすべては、sql.query関数が非同期であるため、すぐに実行されます。試しにasyncを使って次の実装を試してみてください。うまくいくはずです:

async.waterfall([ 
    async.apply(sql.query, query), 
    function(rows, field, callback){ 
     for(var i = 0; i < rows.length; i++) { 
      do_something_complicated(); 
     } 

     callback(null); // This is important, call callback after you are done with everything and pass null for the error parameter 
    } 
], 
function(err){ 
    if(err) throw err; 

    // Everything is executed by now 
} 
関連する問題