Rumah >hujung hadapan web >tutorial js >Bagaimanakah Promise.all Boleh Meningkatkan Pengendalian Operasi Async Serentak dan Mengelakkan Penolakan Tidak Terkendali?

Bagaimanakah Promise.all Boleh Meningkatkan Pengendalian Operasi Async Serentak dan Mengelakkan Penolakan Tidak Terkendali?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 17:03:32729semak imbas

How Can Promise.all Improve Concurrent Async Operation Handling and Avoid Unhandled Rejections?

Menunggu Operasi Async Serentak

Pelaksanaan Selari dengan Promise.all

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.

Mengendalikan Janji Ditolak

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.

Sintaks untuk Menunggu Selari

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.

Perbandingan Pendekatan

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:

  • Berurutan: Output konsol menunjukkan a kelewatan 500ms sebelum ralat direkodkan.
  • Serentak: Output konsol menunjukkan log ralat selepas 100ms.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn