JavaScript の For ループ内での非同期関数の呼び出し
JavaScript の非同期の性質により、for ループ内で非同期関数を呼び出すときに問題が発生する可能性があります。次のコードを考えてみましょう:
for(var i = 0; i < list.length; i++){ mc_cli.get(list[i], function(err, response) { do_something(i); }); }
問題は、for ループの完了後に実行される可能性がある非同期コールバック関数にあります。その結果、 do_something(i) は常にループの最後の反復を参照します。
クロージャーを使用した試行された解決策
開発者は、クロージャーを使用して i の値を取得しようとしました。ループの各反復内:
do_something((function(x){return x})(i))
ただし、関数がすぐに実行されるため、このアプローチも失敗し、同じ問題が発生します。
forEach
より効率的な解決策は、配列項目とそのインデックスをコールバック関数に提供する JavaScript の forEach メソッドを利用することです。各コールバックには独自のスコープがあるため、インデックス値は保持されます。list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });
以上がJavaScript For ループ内で非同期関数呼び出しを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。