Rumah >hujung hadapan web >tutorial js >Bagaimanakah Promise.all Boleh Meningkatkan Pengendalian Operasi Async Serentak dan Mengelakkan Penolakan Tidak Terkendali?
Untuk mencetuskan berbilang operasi async serentak, elakkan menggunakan corak yang anda memperoleh janji dan kemudian tunggu mereka secara berurutan. Sebaliknya, manfaatkan fungsi Promise.all:
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
Pendekatan ini memulakan kedua-dua operasi async secara serentak dan memberikan hasil dalam tatasusunan.
Yang disediakan penyelesaian menjalankan operasi secara selari, tetapi menunggu yang pertama selesai sebelum menunggu yang kedua. Walaupun ini membenarkan pelaksanaan selari, ia memperkenalkan isu dalam mengendalikan janji yang ditolak.
Jika janji pertama mengambil masa lebih lama untuk disiapkan dan yang kedua gagal, Promise.all akan gagal serta-merta, menghalang janji pertama daripada ditolak. Ini boleh mengakibatkan ralat penolakan yang tidak dikendalikan.
Pada masa ini, tiada sintaks menunggu yang ditetapkan untuk menunggu selari, oleh itu alternatif menggunakan Promise.all. Perbincangan telah timbul mengenai await.all, yang menunjukkan kemungkinan peningkatan masa hadapan.
Pertimbangkan contoh berikut, di mana getValue1Async mengambil masa 500ms untuk diselesaikan dan getValue2Async mengambil masa 100ms untuk menolak:
Berurutan Pelaksanaan:
async () => { try { const value1 = await getValue1Async(); const value2 = await getValue2Async(); } catch (e) { console.error(e); } };
Pelaksanaan Serentak dengan Janji.semua:
async () => { try { const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("Promise.all", e); } };
Output:
Kesimpulan:
Menggunakan Promise.all dengan berkesan membolehkan pelaksanaan selari async operasi dan memastikan pengendalian janji yang ditolak dengan betul.
Atas ialah kandungan terperinci Bagaimanakah Promise.all Boleh Meningkatkan Pengendalian Operasi Async Serentak dan Mengelakkan Penolakan Tidak Terkendali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!