Dalam JavaScript, melaksanakan fungsi tak segerak dalam untuk gelung boleh menjadi rumit disebabkan oleh isu penutupan. Mari kita selidiki senario biasa dan terokai cara menanganinya menggunakan pendekatan yang betul.
Pertimbangkan kod berikut:
<code class="javascript">for(var i = 0; i < list.length; i++){ mc_cli.get(list[i], function(err, response) { do_something(i); }); }</code>
Di sini, fungsi tak segerak mc_cli.get() digunakan dalam a untuk gelung. Walau bagaimanapun, apabila panggilan balik dilaksanakan, nilai i mungkin telah berubah disebabkan oleh sifat tak segerak bagi fungsi tersebut.
Untuk menyelesaikan masalah ini, penutupan mesti digunakan dengan betul. Penggunaan penutupan yang salah, seperti yang dicuba dalam kod yang disediakan, menyebabkan nilai terakhir i digunakan berulang kali.
Pendekatan yang betul ialah menggunakan forEach() dan bukannya gelung for. forEach() menyediakan kedua-dua item senarai dan indeksnya dalam panggilan balik, memastikan setiap lelaran mengekalkan skopnya sendiri.
<code class="javascript">list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });</code>
Dalam pendekatan ini, setiap panggilan balik dalam forEach() merujuk nilai indeks uniknya sendiri, menyelesaikan isu penutupan dan memastikan do_something() sentiasa menerima nilai indeks yang betul.
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, semuanya dalam format soalan: Langsung dan Jelas: * Bagaimana untuk Mengendalikan Panggilan Asynchronous dalam For Loops dalam JavaScript? * Mengapa Menggunakan For Loops dengan Panggilan Asynchronous di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!