Rumah >hujung hadapan web >tutorial js >Adakah Promise.all Menjamin Susunan Nilai yang Diselesaikan Padan dengan Pesanan Boleh Lelar Input?

Adakah Promise.all Menjamin Susunan Nilai yang Diselesaikan Padan dengan Pesanan Boleh Lelar Input?

Barbara Streisand
Barbara Streisandasal
2024-11-03 14:41:31617semak imbas

Does Promise.all Guarantee the Order of Resolved Values Matches the Input Iterable Order?

Memelihara Ketenteraman dalam Promise.all

Promise.all ialah fungsi JavaScript yang mengambil janji yang boleh diubah dan mengembalikan satu janji yang diselesaikan apabila semua janji input telah diselesaikan. Ia selalunya digunakan untuk menunggu beberapa operasi async selesai sebelum meneruskan.

Persoalan biasa timbul: adakah susunan nilai yang diselesaikan dalam janji output dijamin sepadan dengan susunan janji input?

Menurut dokumentasi MDN, nampaknya nilai yang dihantar kepada panggilan balik Promise.all kemudiannya dibentangkan dalam susunan janji. Soalan ini meminta pengesahan daripada spesifikasi.

Spesifikasi Promise.all (https://tc39.github.io/ecma262/#sec-promise.all) menyatakan bahawa:

  • Promise.all(iterable) mengambil iterable sebagai input dan mengulanginya menggunakan IteratorStep(iterator).
  • Setiap janji yang diselesaikan mempunyai slot dalaman [[Index]], yang menunjukkan indeksnya dalam iterable asal.
  • Penyelesaian dilaksanakan melalui Promise.all() Resolve, di mana slot janji yang diselesaikan [[Indeks]] digunakan untuk menentukan indeks nilai dalam tatasusunan output.

Menggabungkan mata ini, jelas bahawa output Promise.all akan sentiasa mengikut urutan input boleh lelar. Ini bermakna jika anda menghantar tatasusunan kepada Promise.all, nilai yang diselesaikan akan muncul dalam tatasusunan output dalam susunan yang sama seperti yang dipaparkan dalam tatasusunan input.

Untuk menunjukkan ini, pertimbangkan contoh berikut:

<code class="javascript">const promises = [1, 2, 3, 4, 5].map(Promise.resolve);
Promise.all(promises).then((results) => {
  console.log(results); // [1, 2, 3, 4, 5]
});</code>

Dalam kes ini, outputnya ialah [1, 2, 3, 4, 5], tanpa mengira janji mana yang diselesaikan dahulu.

Atas ialah kandungan terperinci Adakah Promise.all Menjamin Susunan Nilai yang Diselesaikan Padan dengan Pesanan Boleh Lelar Input?. 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