0

私は Node.js から Javascript MYSQL ライブラリを使用しており、複数のクエリをループで実行しています。しかし、ループを実行するthe loopと、開始したクエリがまだ処理されている間に、常に突然終了 (完了) します。では、ループを維持して各クエリが完了するまで待機し、通常どおり続行するにはどうすればよいですか?

私のコードは次のとおりです。

function startHere() {
    console.log("-- START --");
    for (i=1; i < 6; i++) {
        dbInsert(i);
    }
    console.log("-- END --");
}
function dbInsert(id) {
    connection.query (
        'INSERT INTO table SET data=?',
        [id],
        function selectCb(err, results, fields) {
            if (err) {
                console.log(err.message);
            }
            if (results.length > 0) {
                console.log(id+" RECORDS ADDED!");
            }
        }
    );
}
startHere();

実行すると、常に次のように返されます。

-- START --
-- END --
1 RECORDS ADDED!
2 RECORDS ADDED!
3 RECORDS ADDED!
4 RECORDS ADDED!
5 RECORDS ADDED!

つまり、ループは開始したクエリの終了を待ちません。
クエリのエンドポイントを検出して機能させるにはどうすればよいですか?

4

2 に答える 2

0

asyncあなたのために働くべきです

async.series([
    function(){ ... },
    function(){ ... }
]);

https://github.com/caolan/async#seriesを参照

于 2012-12-11T10:35:21.280 に答える
0

selectCb メソッドは同期的に呼び出されていないため、ループは各呼び出しを効果的に開始してから戻っています。

ドキュメントでその connection.query メソッドの同期バージョンを確認するか、すべての挿入が発生した後に終了メッセージを出力するコールバックを作成する必要があります。

于 2012-06-09T18:16:47.687 に答える