Promise.all()

DDD
DDDasal
2025-01-21 12:34:16572semak imbas

Promise.all()

Pemahaman yang mendalam tentang JavaScriptPromise.all()

Promise.all() ialah kaedah yang berkuasa dalam JavaScript untuk mengendalikan berbilang operasi tak segerak secara serentak. Ia menerima objek boleh lelar (biasanya tatasusunan) yang mengandungi berbilang Janji dan mengembalikan Janji tunggal. Janji tunggal ini hanya akan diselesaikan jika semua Janji input berjaya diselesaikan jika mana-mana Janji ditolak, Janji tunggal akan ditolak serta-merta. Panduan ini akan meneroka kefungsian, sintaks, tingkah laku dan contoh praktikal Promise.all().

Tatabahasa

Sintaks

Promise.all() adalah mudah:

<code class="language-javascript">Promise.all(iterable);</code>
  • boleh diulang: Tatasusunan atau objek boleh lelar lain yang mengandungi Janji atau nilai. Nilai Bukan Janji akan dianggap sebagai Janji yang diselesaikan.

Nilai pulangan

Kaedah ini mengembalikan Janji dengan tingkah laku berikut:

  • Jika iterable kosong, ia akan dihuraikan serta-merta sebagai tatasusunan kosong.
  • Jika semua Promises dalam iterable telah berjaya, selesaikan pada tatasusunan yang mengandungi nilai yang berjaya, mengekalkan susunan asalnya.
  • Jika mana-mana Janji ditolak, ia ditolak serta-merta dan sebab Janji pertama ditolak dikembalikan, mengabaikan keputusan semua Janji lain.

Kejayaan dan Kegagalan

  1. Berjaya: Apabila semua Janji telah berjaya diselesaikan, Promise.all() mengembalikan tatasusunan hasil dalam susunan yang sama dengan input Janji.
  2. Gagal: Jika ada Janji yang ditolak, Promise.all() akan ditolak serta-merta dan alasan penolakan Janji akan dikembalikan.

Contoh praktikal

Contoh 1: Penggunaan asas

Dalam contoh ini kami mencipta tiga Janji yang diselesaikan selepas tamat masa yang berbeza:

<code class="language-javascript">const promise1 = new Promise((resolve) => setTimeout(() => resolve('One'), 1000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Two'), 2000));
const promise3 = new Promise((resolve) => setTimeout(() => resolve('Three'), 3000));

Promise.all([promise1, promise2, promise3])
  .then(values => console.log(values)) // 输出: ['One', 'Two', 'Three']
  .catch(error => console.error(error));</code>

Di sini, Promise.all() menunggu ketiga-tiga Janji diselesaikan, kemudian log keputusannya ke konsol sebagai tatasusunan.

Contoh 2: Pemprosesan nilai campuran

Anda juga boleh mencampurkan nilai yang diselesaikan dan Janji:

<code class="language-javascript">const p1 = Promise.resolve(42);
const p2 = Promise.resolve('Hello');
const p3 = new Promise((resolve) => setTimeout(() => resolve('World'), 1000));

Promise.all([p1, p2, p3])
  .then(values => console.log(values)) // 输出: [42, 'Hello', 'World']
  .catch(error => console.error(error));</code>

Dalam kes ini, p1 dan p2 menyelesaikan serta-merta, manakala p3 menyelesaikan selepas satu saat.

Contoh 3: Pengendalian Kegagalan

Jika salah satu Janji ditolak, Promise.all() akan ditolak serta-merta:

<code class="language-javascript">const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('Failed!'));
const p3 = new Promise((resolve) => setTimeout(() => resolve('This will not run'), 1000));

Promise.all([p1, p2, p3])
  .then(values => console.log(values))
  .catch(error => console.error(error.message)); // 输出: 'Failed!'</code>

Di sini, kerana p2 ditolak, keseluruhan operasi gagal dan mesej ralat direkodkan.

Senario aplikasi

Promise.all()

  • Dapatkan berbilang sumber: Apabila anda perlu mendapatkan data daripada berbilang API pada masa yang sama dan tunggu sebelum memproses semua respons.
  • Pemprosesan selari: Apabila berbilang tugasan bebas dilaksanakan serentak dan keputusannya perlu digabungkan bersama.
  • Operasi Kelompok: Apabila melakukan kemas kini kelompok atau pengiraan di mana setiap operasi boleh diselesaikan secara berasingan.

Kesimpulan

Promise.all() ialah alat penting untuk mengurus berbilang operasi tak segerak dalam JavaScript. Ia memudahkan kod dengan membenarkan pembangun menunggu beberapa Janji diselesaikan sebelum meneruskan dengan logik lain. Walau bagaimanapun, adalah penting untuk mengendalikan kegagalan dengan betul, kerana kegagalan mana-mana satu Janji akan menyebabkan keseluruhan operasi gagal. Memahami cara menggunakan Promise.all() dengan berkesan membolehkan anda menulis kod tak segerak yang lebih bersih dan cekap.

Rujukan: [1] https://www.php.cn/link/ebd58b8a3f1d72f4206201da62fb1204 [2] https://www.php.cn/link/9181a74736d3b86345dadbc90e29390e [3] https://www.php.cn/link/2a3e953a5e3d81e67945bce5519f84c8 [4] https://www.php.cn/link/4c0303ffb193bd5e66078909a15268aa [5] https://www.php.cn/link/9c25dc28b94e5226f1983330dc421cec [6] https://www.php.cn/link/b2f1384b8feb04d2de9a85124dc64613 [7] https://www.php.cn/link/f1e1fd9e97f59379ed79bdf258d55042 [8] https://www.php.cn/link/9a5859b8f76280c97c0c185a19d17014 [9] https://www.php.cn/link/d3f010d6bc392b904f63ce5792891b71 [10] https://www.php.cn/link/4d419d5b4274ea8faaf4f37410b97bd6

Atas ialah kandungan terperinci Promise.all(). 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
Artikel sebelumnya:soket webArtikel seterusnya:soket web