Adakah `Promise.all()` Mengekalkan Susunan Nilai Terselesai?

DDD
Lepaskan: 2024-11-04 05:22:29
asal
955 orang telah melayarinya

Does `Promise.all()` Preserve the Order of Resolved Values?

Promise.all: Mengekalkan Susunan Nilai Terselesai

Kaedah Promise.all() mengambil iterable sebagai hujahnya dan mengembalikan yang baharu janji yang diselesaikan sebaik sahaja semua janji dalam iterable telah diselesaikan. Persoalannya timbul: adakah susunan nilai yang diselesaikan dijamin sepadan dengan susunan janji dalam iterable?

Menurut dokumentasi MDN, nilai yang diselesaikan harus muncul dalam susunan janji. Walau bagaimanapun, rujukan langsung kepada gelagat khusus ini tidak dapat dilihat dengan serta-merta dalam spesifikasi.

Menyelidiki spesifikasi dengan lebih mendalam, kami mendapati bahawa PerformPromiseAll() digunakan dengan iterable diserahkan kepada Promise.all(). PerformPromiseAll() kemudian melelar ke atas iterable menggunakan IteratorStep(), yang menjamin susunan janji.

Selain itu, setiap janji yang diselesaikan mempunyai slot dalaman [[Indeks]] yang menandakan indeksnya dalam input asal yang boleh diulang. Slot ini digunakan semasa proses resolusi untuk memastikan tatasusunan output mengekalkan susunan asal.

Ringkasnya, urutan nilai yang diselesaikan dalam Promise.all() dipelihara dengan ketat selagi input iterable dipesan. Ini ditunjukkan dalam coretan kod berikut:

<code class="js">const slow = new Promise(resolve => setTimeout(resolve, 200, 'slow'));
const instant = 'instant';
const quick = new Promise(resolve => setTimeout(resolve, 50, 'quick'));

Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => console.log(response));
});

// Output: [ 'instant', 'quick', 'slow' ]</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Adakah `Promise.all()` Mengekalkan Susunan Nilai Terselesai?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan