Masalah
Bagaimanakah kita boleh melaksanakan fungsi panggil balik setelah semuanya tak segerak operasi dalam satu gelung forEach telah selesai?
Jawapan
Array.forEach tidak menyediakan penyelesaian luar kotak untuk senario ini, tetapi terdapat pelbagai pendekatan untuk mencapai kefungsian yang diingini.
<br>function callback() { console.log('all done'); }</p> <p>var itemsProcessed = 0;</p> <p>[1, 2, 3].forEach(item => {<br> asyncFunction(item, () => {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">itemsProcessed++; if(itemsProcessed === array.length) { callback(); }
});
});
Pendekatan ini menggunakan pembilang yang dinaikkan setiap kali operasi tak segerak selesai. Sebaik sahaja kaunter mencapai jumlah bilangan item dalam tatasusunan, fungsi panggil balik akan digunakan.
requests.then(() => konsol. log('done'))
Dalam contoh ini, kami berjanji untuk menjamin bahawa setiap operasi tak segerak selesai sebelum operasi seterusnya bermula.
<br>permintaan const = [1,2,3].map((item) => {<br>kembali Janji baharu((resolve) = > {<br> asyncFunction(item, resolve);<br>});<br>})</li></ul> <p>Promise.all(requests).then(() => console.log ('done'));<br>
Dalam kes ini, kami menggunakan kaedah Promise.all untuk melaksanakan semua operasi tak segerak secara serentak dan kemudian memanggil panggilan balik apabila kesemuanya selesai.
Pustaka tak segerak seperti async menyediakan mekanisme untuk menyatakan fungsi yang diingini dengan lebih elegan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Panggilan Balik selepas Asynchronous forEach Tasks Selesai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!