Heim >Web-Frontend >js-Tutorial >Wie führt man eine Reihe von Versprechen in der richtigen Reihenfolge aus und behandelt Ablehnungen?
In diesem Szenario müssen Sie sicherstellen, dass:
Obwohl es hierfür keine direkte integrierte Lösung gibt, gibt es folgende Möglichkeiten, dieses Verhalten zu erreichen:
Manuelle Iteration mithilfe von Rekursion:
function sequence(arr) { const index = 0; function next() { if (index < arr.length) { arr[index]().then(next).catch(reject); index++; } } next(); }
Verwenden Reduzieren:
function sequence(arr) { return arr.reduce((p, item) => { return p.then(() => item()); // Assuming each element is a promise-returning function }, Promise.resolve()); }
Verwendung von Promise.mapSeries:
Wenn Sie die Bluebird Promise-Bibliothek verwenden, können Sie deren Promise.mapSeries-Methode verwenden:
function sequence(arr) { return Promise.mapSeries(arr, item => item()); }
Mit ES7 Async/Await:
Falls unterstützt, können Sie async/await verwenden, um dies zu erreichen:
async function sequence(arr) { const results = []; for (let item of arr) { results.push(await item()); } return results; }
Spex-Bibliothek verwenden:
Die Spex-Bibliothek bietet eine Sequenzmethode, mit der Sie über eine dynamische Sequenz iterieren können verspricht:
import { sequence } from 'spex'; function sequence(nextPromise) { // while nextPromise() creates and returns another promise, continue resolving it; }
Denken Sie daran, wenn ein Element im Array abgelehnt wird, wird die Sequenz abgelehnt, sobald diese Ablehnung auftritt. Dieses Verhalten stellt sicher, dass keine weiteren Elemente verarbeitet werden.
Das obige ist der detaillierte Inhalt vonWie führt man eine Reihe von Versprechen in der richtigen Reihenfolge aus und behandelt Ablehnungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!