Rumah >hujung hadapan web >tutorial js >Promise.all() lwn. Multiple Awaits: Bila Perlu Menggunakan Panggilan Async Serentak lwn. Sequential dalam JavaScript?

Promise.all() lwn. Multiple Awaits: Bila Perlu Menggunakan Panggilan Async Serentak lwn. Sequential dalam JavaScript?

Patricia Arquette
Patricia Arquetteasal
2024-12-01 22:56:15739semak imbas

Promise.all() vs. Multiple Awaits: When to Use Concurrent vs. Sequential Async Calls in JavaScript?

Panggilan Async Serentak lwn. Berurutan: Promise.all() lwn. Penantian Berbilang

Dalam JavaScript, pembangun sering menggunakan fungsi tak segerak untuk mengelakkan menyekat benang utama dan meningkatkan prestasi. Dua corak biasa untuk mengendalikan tugas tak segerak ialah menggunakan Promise.all() dan berbilang penyataan menunggu.

1. Promise.all()

Promise.all([promise1, promise2, ...]) mengambil pelbagai janji dan mengembalikan janji baharu yang diselesaikan apabila semua janji input telah diselesaikan (sama ada diselesaikan atau ditolak). Ini membolehkan anda menunggu beberapa operasi tak segerak selesai serentak.

2. Penantian Berbilang

Menggunakan pernyataan tunggu berbilang membolehkan anda menunggu operasi tak segerak satu demi satu. Ini secara berkesan mensiri operasi, melaksanakannya secara berurutan.

Perbezaan Masa

Perbezaan utama antara Promise.all() dan beberapa kenyataan menunggu terletak pada masanya. Promise.all() memulakan semua operasi tak segerak secara serentak, manakala beberapa penyataan menunggu melaksanakannya satu demi satu.

Perbezaan masa ini boleh menjejaskan prestasi dalam senario di mana sesetengah operasi tak segerak mengambil masa yang lebih lama daripada yang lain. Dalam kes sedemikian, menggunakan Promise.all() boleh meningkatkan prestasi dengan memanfaatkan kesesuaian.

Contoh

Pertimbangkan coretan kod berikut:

const res = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));

const example = async () => {
  const start = Date.now();
  const data = await Promise.all([res(3000), res(2000), res(1000)]);
  console.log(`Promise.all finished after: ${Date.now() - start}ms`);
};

example();

Apabila melaksanakan kod ini, tiga operasi tak segerak (ditunda sebanyak 3000, 2000, dan 1000 milisaat, masing-masing) akan berjalan serentak. Akibatnya, Promise.all hanya akan diselesaikan setelah ketiga-tiga operasi selesai dan hasilnya akan direkodkan 3000 milisaat selepas permulaan fungsi.

Atas ialah kandungan terperinci Promise.all() lwn. Multiple Awaits: Bila Perlu Menggunakan Panggilan Async Serentak lwn. Sequential dalam JavaScript?. 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