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:
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!