JavaScript for ループ内の非同期処理: 変数スコープの問題に対処する
非同期プロセスを利用する for ループ内でイベント ループを実行する場合コールバック関数がループ変数 i の誤った値を取得するという問題がよく発生します。この動作は、非同期操作が終了する前にループが反復を完了するという事実に起因します。その結果、コールバックはすべて i の最終値を参照します。
この問題に対処し、各コールバックが i:
1.関数クロージャの使用関数クロージャを利用すると、反復ごとに i の値を一意に取得できます。これは、匿名インライン関数クロージャ:someArray.forEach((item, i) => { asynchronousProcess(() => { console.log(i); }); });
const j = 10; for (let i = 0; i < j; i++) { (function(cntr) { asynchronousProcess(cntr, (result) => { console.log(result); // cntr will hold the correct value of i }); })(i); }
const j = 10; for (let i = 0; i < j; i++) { asynchronousProcess(() => { console.log(i); }); }
async function someFunction() { const j = 10; for (let i = 0; i < j; i++) { await asynchronousProcess(); console.log(i); } }
以上がJavaScript の非同期 For ループ変数のスコープの問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。