Dalam senario ini, anda perlu memastikan bahawa:
Walaupun tiada penyelesaian terbina dalam langsung untuk ini, berikut ialah cara untuk mencapai tingkah laku ini:
Lelaran Manual Menggunakan Rekursi:
function sequence(arr) { const index = 0; function next() { if (index < arr.length) { arr[index]().then(next).catch(reject); index++; } } next(); }
Menggunakan Kurangkan:
function sequence(arr) { return arr.reduce((p, item) => { return p.then(() => item()); // Assuming each element is a promise-returning function }, Promise.resolve()); }
Menggunakan Promise.mapSeries:
Jika anda menggunakan perpustakaan Bluebird Promise, anda boleh menggunakan kaedah Promise.mapSeries:
function sequence(arr) { return Promise.mapSeries(arr, item => item()); }
Menggunakan ES7 Async/Await:
Jika disokong, anda boleh menggunakan async/wait untuk mencapai ini:
async function sequence(arr) { const results = []; for (let item of arr) { results.push(await item()); } return results; }
Menggunakan Spex Library:
Pustaka spex menyediakan kaedah jujukan yang membolehkan anda mengulangi jujukan dinamik janji:
import { sequence } from 'spex'; function sequence(nextPromise) { // while nextPromise() creates and returns another promise, continue resolving it; }
Ingat, jika mana-mana elemen dalam tatasusunan ditolak, jujukan akan menolak sebaik sahaja penolakan itu ditemui. Tingkah laku ini memastikan elemen selanjutnya tidak diproses.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Urutan Janji dalam Susunan dan Mengendalikan Penolakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!