Rumah >hujung hadapan web >tutorial js >Menggunakan Promise.all()
Gunakan sekali
await
untuk menunggu berbilang proses tak segerak.
Salah satu kekuatan JavaScript ialah keupayaannya untuk melaksanakan operasi tak segerak untuk mengelakkan proses menunggu antara satu sama lain. Dalam aplikasi praktikal, operasi tak segerak sering digunakan untuk proses yang masa menunggunya bergantung pada faktor luaran, seperti sambungan rangkaian, kelajuan storan, dsb. Berikut ialah beberapa contoh operasi tak segerak:
Dalam JavaScript, operasi tak segerak biasanya dilaksanakan menggunakan fungsi. Fungsi ialah satu set blok kod yang melaksanakan tugas tertentu, seperti fungsi tambahan untuk mengira jumlah dan fungsi penutupan untuk mematikan komputer (mungkin ada fungsi sedemikian?).
Untuk mentakrifkan fungsi tak segerak, cuma tambahkan kata kunci async
apabila fungsi itu diisytiharkan, dan selebihnya adalah sama seperti fungsi biasa.
Sebagai contoh, kami mentakrifkan fungsi untuk menghantar e-mel secara tidak segerak:
<code class="language-javascript">async function kirimEmail(tujuan, judul, isi) { // 发送邮件 // ... }</code>
Atau gunakan fungsi anak panah:
<code class="language-javascript">const kirimEmail = async (tujuan, judul, isi) => { // 发送邮件 // ... }</code>
Apabila fungsi di atas dipanggil, ia secara automatik akan melaksanakan secara tidak segerak, yang bermaksud tiada masa menunggu antara satu sama lain.
Contohnya:
<code class="language-javascript">kirimEmail('contoh1@email.com', 'Tes 1 Email', 'Halo. Ini saya lagi ngetes.'); kirimEmail('contoh2@email.com', 'Tes 2 Email', 'Halo. Ini saya lagi ngetes.'); kirimEmail('contoh3@email.com', 'Tes 3 Email', 'Halo. Ini saya lagi ngetes.');</code>
Dalam contoh di atas, semua proses yang menghantar e-mel dilaksanakan mengikut urutan, tetapi tiada satu proses menunggu untuk diselesaikan. Oleh itu, proses seterusnya akan dimulakan manakala proses sebelumnya tidak selesai dan tidak akan menghalang satu sama lain.
Jika anda perlu mendapatkan data atau menunggu proses tak segerak selesai, anda boleh menggunakan kata kunci await
semasa memanggil fungsi.
Contohnya:
<code class="language-javascript">await kirimEmail('contoh1@email.com', 'Tes 1 Email', 'Halo. Ini saya lagi ngetes.'); await kirimEmail('contoh2@email.com', 'Tes 2 Email', 'Halo. Ini saya lagi ngetes.'); await kirimEmail('contoh3@email.com', 'Tes 3 Email', 'Halo. Ini saya lagi ngetes.');</code>
Dalam contoh ini, setiap proses akan menunggu sehingga proses sebelumnya selesai. Ini biasanya berlaku apabila data perlu diambil dari satu proses untuk proses seterusnya, jadi seseorang itu perlu menunggu proses sebelumnya selesai sebelum mengambil data yang diperlukan.
Menggunakan Promise.all
, kita boleh memanggil dan menunggu berbilang fungsi tak segerak pada masa yang sama.
Contoh penggunaan Promise.all
untuk memanggil berbilang fungsi tak segerak adalah seperti berikut:
<code class="language-javascript">await Promise.all([ kirimEmail('contoh1@email.com', 'Tes 1 Email', 'Halo. Ini saya lagi ngetes.'), kirimEmail('contoh2@email.com', 'Tes 2 Email', 'Halo. Ini saya lagi ngetes.'), kirimEmail('contoh3@email.com', 'Tes 3 Email', 'Halo. Ini saya lagi ngetes.'), ]);</code>
Dalam contoh di atas, kami menunggu selesainya tiga proses penghantaran mel, dan hasilnya akan dikembalikan dalam bentuk tatasusunan tanpa mengira kejayaan atau kegagalan.
Promise.all
mempunyai ciri-ciri berikut:
await
Jika ralat berlaku dalam salah satu proses, semua proses akan melaporkan ralat. Menggunakan Promise.all
sangat mudah, kita hanya perlu menulis await
sekali, dan ia juga berguna jika kita ingin menghentikan semua proses jika salah satu daripadanya ralat. Walau bagaimanapun, jika kita ingin terus melaksanakan proses lain walaupun satu proses gagal, kita akan membincangkan perkara ini dalam artikel seterusnya.
Terima kasih kerana membaca. Jika anda ingin berbincang, sila tinggalkan mesej. Jika anda ingin berkawan, sila beritahu saya ?
Atas ialah kandungan terperinci Menggunakan Promise.all(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!