ホームページ >ウェブフロントエンド >jsチュートリアル >以下にいくつかのタイトルのオプションを示します。すべて質問形式です。 ダイレクトかつクリア: * JavaScript の For ループ内で非同期呼び出しを処理するには? * Java で非同期呼び出しで For ループを使用するとなぜ問題があるのか
JavaScript では、クロージャの問題により、for ループ内での非同期関数の実行が難しい場合があります。一般的なシナリオを詳しく調べて、正しいアプローチを使用してそれに対処する方法を検討してみましょう。
次のコードを考えてみましょう。
<code class="javascript">for(var i = 0; i < list.length; i++){ mc_cli.get(list[i], function(err, response) { do_something(i); }); }</code>
ここでは、非同期関数 mc_cli.get() が呼び出されます。 for ループ。ただし、コールバックが実行されると、関数の非同期の性質により i の値が変更される可能性があります。
これを解決するには、クロージャを正しく使用する必要があります。提供されたコードで試みられたクロージャの誤った使用により、 i の最後の値が繰り返し使用されることになります。
正しいアプローチは、for ループの代わりに forEach() を使用することです。 forEach() はコールバックでリスト項目とそのインデックスの両方を提供し、各反復が独自のスコープを維持するようにします。
<code class="javascript">list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });</code>
このアプローチでは、forEach() 内の各コールバックは独自の一意のインデックス値を参照します。クロージャーの問題を解決し、 do_something() が常に正しいインデックス値を受け取るようにします。
以上が以下にいくつかのタイトルのオプションを示します。すべて質問形式です。 ダイレクトかつクリア: * JavaScript の For ループ内で非同期呼び出しを処理するには? * Java で非同期呼び出しで For ループを使用するとなぜ問題があるのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。