JavaScript For ループ内で非同期関数呼び出しを処理する方法は?

DDD
リリース: 2024-10-28 03:54:30
オリジナル
276 人が閲覧しました

How to Handle Asynchronous Function Calls within JavaScript For Loops?

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);
  });
});
ログイン後にコピー
forEach を利用することで、コールバック関数は反復ごとに正しいインデックス値にアクセスできるようになり、不正なインデックスが作成される問題が解決されました。 do_something 関数で参照されます。

以上がJavaScript For ループ内で非同期関数呼び出しを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート