私はnodejsを初めて使い、何かを印刷するためにforループ内の関数を呼び出そうとしています。Node.js - ループ非同期
var mysql = require("mysql"),
async = require("async");
function test() {
setTimeout(function() {
console.log('boo');
}, 100)
}
con.query('SELECT * FROM database', function(err, rows){
if(err) throw err;
for (var i = 0; i < rows.length; i++) {
console.log('Processing ID: ' + rows[i].id);
test();
}
});
ループがブーイングを待っていないように見えますが、すべての値が継続しているようです。出力は次のとおりです。
Processing ID: 1
Processing ID: 2
boo
boo
しかし、私が本当に欲しいのはこれです:
Processing ID: 1
boo
Processing ID: 2
boo
私もこのように非同期ライブラリを使用してみました:
async.each(rows, function(rows, callback) {
console.log('Processing ID: ' + rows.id);
test();
callback();
}, function(err) {
if(err) {
console.log('A file failed to process');
} else {
console.log('All files have been processed successfully');
}
});
表示されます。 –
あなたの質問には順序が重要ですか?非同期ドキュメントでは明示的に " "と書かれています。この関数はiterateeを各項目を並行して実行すると、iteratee関数が順番に完了するという保証はありません。 " – aaaaaa
@aaaaaaこれは簡単な例です。このプロセスを理解することができるので、webdriverと:driverを使用しています。待つ(elementLocatedまで... ")。 forは、配置される要素を待つことなく、ループ処理を続行します。 –