Rumah >hujung hadapan web >tutorial js >Adakah `Promise.all()` Menjamin Susunan Nilai Terselesai?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 05:40:02947semak imbas

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

Promise.all: Order of Resolved Values

Kaedah Promise.all() membolehkan pelaksanaan serentak dan resolusi berbilang janji, menawarkan pembangun alat yang berkuasa untuk pengaturcaraan tak segerak . Satu soalan yang menarik timbul mengenai susunan nilai yang diselesaikan dalam tatasusunan hasil Promise.all().

Menurut Rangkaian Pembangun Mozilla (MDN), hasil yang diperoleh daripada panggilan balik .then() Promise. all() nampaknya dipesan dalam urutan yang sama seperti yang dijanjikan input. Contohnya:

var somePromises = [1, 2, 3, 4, 5].map(Promise.resolve);
return Promise.all(somePromises).then(function(results) {
  console.log(results) //  is [1, 2, 3, 4, 5] the guaranteed result?
});

Adakah tingkah laku ini dijamin oleh spesifikasi Promises? Mari kita mendalami butiran teknikal untuk mengetahui.

Memelihara Ketenteraman dalam Promise.all()

Dalam kaedah Promise.all(iterable), iterable mewakili koleksi janji. Fungsi PerformPromiseAll(iterator, constructor, resultCapability) digunakan secara dalaman, lelaran melalui iterable menggunakan IteratorStep(iterator).

Apabila janji diselesaikan dengan nilai yang diselesaikan, Promise.all() Resolve digunakan. Setiap janji yang diselesaikan membawa slot [[Indeks]] dalaman, menandakan kedudukannya dalam lelaran asal.

Oleh itu, output daripada Promise.all() mengekalkan susunan ketat yang sepadan dengan susunan janji dalam input boleh lelar. Ini berlaku selagi iterable yang disediakan dipesan dengan ketat, seperti tatasusunan.

Demonstrasi Pemeliharaan Pesanan

Berikut ialah contoh praktikal yang menggambarkan pemeliharaan pesanan dalam Promise.all():

<code class="javascript">// Used to display results
const write = msg => {
  document.body.appendChild(document.createElement('div')).innerHTML = msg;
};

// Different speed async operations
const slow = new Promise(resolve => {
  setTimeout(resolve, 200, 'slow');
});
const instant = 'instant';
const quick = new Promise(resolve => {
  setTimeout(resolve, 50, 'quick');
});

// The order is preserved regardless of what resolved first
Promise.all([slow, instant, quick]).then(responses => {
  responses.map(response => write(response));
});</code>

Dalam senario ini, nilai 'semerta' diselesaikan serta-merta, diikuti dengan 'cepat' dan 'lambat'. Walau bagaimanapun, mengikut pemeliharaan pesanan dalam Promise.all(), hasilnya akan dipaparkan dalam urutan: 'perlahan', 'semerta', 'cepat', sejajar dengan susunan janji dalam tatasusunan input.

Atas ialah kandungan terperinci Adakah `Promise.all()` Menjamin Susunan Nilai Terselesai?. 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