Rumah > hujung hadapan web > tutorial js > Bagaimanakah Promise.all Boleh Meningkatkan Serentak Menanti Pelaksanaan dan Pengendalian Ralat?

Bagaimanakah Promise.all Boleh Meningkatkan Serentak Menanti Pelaksanaan dan Pengendalian Ralat?

Mary-Kate Olsen
Lepaskan: 2024-12-11 16:15:11
asal
774 orang telah melayarinya

How Can Promise.all Improve Concurrent Await Execution and Error Handling?

Pelaksanaan Serentak Menunggu: Mengatasi Perlaksanaan Berjujukan

Isu:

Dalam pengaturcaraan tak segerak tradisional, pelaksanaan operasi sedar berbilang serentak terhalang kerana berurutan pemprosesan.

Punca:

Kod yang dimaksudkan menunggu operasi menunggu pertama selesai sebelum memulakan yang kedua.

Cadangan Penyelesaian :

Cadangan awal untuk mendapatkan janji sebelum menunggunya secara berasingan memang membenarkan selari perlaksanaan. Walau bagaimanapun, ia memperkenalkan isu dengan pengendalian ralat dan kemungkinan ralat penolakan yang tidak dapat dikendalikan.

Pendekatan Disyorkan:

Daripada penyelesaian yang dicadangkan, kami mengesyorkan agar anda menggunakan Promise.all:

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
Salin selepas log masuk

Kebaikan Promise.all:

  • Memulakan pelaksanaan selari semua janji yang disediakan.
  • Mengendalikan penolakan dengan betul, mengelakkan ralat penolakan yang tidak dikendalikan.
  • Memberikan yang lebih ringkas dan sintaks yang konsisten berbanding dengan yang dicadangkan penyelesaian.

Contoh:

Pertimbangkan contoh berikut yang menunjukkan perbezaan dalam pemasaan dan pengendalian ralat:

const getValue1Async = () => {
  return new Promise(resolve => {
    setTimeout(resolve, 500, "value1");
  });
};

const getValue2Async = () => {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 100, "error");
  });
};

// Sequential execution with proposed solution
(async () => {
  try {
    console.time("sequential");
    const p1 = getValue1Async();
    const p2 = getValue2Async();
    const value1 = await p1;
    const value2 = await p2;
  } catch (e) {
    console.error(e);
  }
  console.timeEnd("sequential");
})();

// Concurrent execution with Promise.all
setTimeout(async () => {
  try {
    console.time("concurrent");
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("concurrent", e);
  }
}, 1000);
Salin selepas log masuk

Dalam contoh pelaksanaan berurutan, kod menunggu 500ms untuk operasi pertama selesai sebelum memulakan operasi kedua. Sebaliknya, contoh pelaksanaan serentak mengendalikan kegagalan operasi kedua serta-merta selepas 100ms.

Atas ialah kandungan terperinci Bagaimanakah Promise.all Boleh Meningkatkan Serentak Menanti Pelaksanaan dan Pengendalian Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan