Bekerja dengan Pelbagai Janji Secara Asynchronous
Artikel ini bertujuan untuk menangani cabaran melaksanakan pelbagai tugas tak segerak dalam gelung dan keperluan untuk memastikan penyelesaiannya sebelum meneruskan tugasan seterusnya.
Bayangkan senario di mana gelung berulang pada set tugasan, setiap satunya dilaksanakan secara tak segerak. Mengikuti gelung, gelung lain bergantung pada penyiapan tugas gelung pertama. Bagaimanakah kita boleh mencapai penyelarasan ini dengan cekap?
Janji menyediakan penyelesaian yang elegan untuk masalah ini. Dengan mengembalikan janji daripada doSomeAsyncStuff(), kami boleh mengurus operasi tak segerak.
Promise.all() ialah kaedah berkuasa yang menerima pelbagai janji dan mengembalikan satu janji. Janji tunggal ini diselesaikan hanya apabila semua janji input diselesaikan atau mana-mana daripadanya ditolak.
Untuk mencapai matlamat kami, kami boleh memanfaatkan Promise.all() seperti berikut:
const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomeAsyncStuff()); } Promise.all(promises) .then(() => { // Execute tasks that require all async tasks to finish }) .catch((e) => { // Handle errors });
Dalam pelaksanaan ini, kami mengumpulkan semua janji dalam tatasusunan dan menyerahkannya kepada Promise.all(). Selepas penyelesaiannya (atau penolakan), kami meneruskan tugas gelung kedua.
Contoh berikut menunjukkan penggunaan Promise.all() untuk menunggu untuk berbilang tugas tak segerak untuk diselesaikan:
function doSomethingAsync(value) { return new Promise((resolve) => { setTimeout(() => { console.log("Resolving " + value); resolve(value); }, Math.floor(Math.random() * 1000)); }); } function test() { const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomethingAsync(i)); } Promise.all(promises) .then((results) => { console.log("All done", results); }) .catch((e) => { // Handle errors }); } test();
Atas ialah kandungan terperinci Bagaimanakah Promise.all() Boleh Mengendalikan Berbilang Tugas Asynchronous Dengan Cekap Sebelum Meneruskan Operasi Seterusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!