Promise.allSettled()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2020 browserübergreifend verfügbar.
Die Promise.allSettled() statische Methode nimmt ein iterables Objekt von Promises als Eingabe und gibt ein einziges Promise zurück. Dieses zurückgegebene Promise erfüllt sich, wenn alle Promises der Eingabe abgeschlossen sind (einschließlich bei Übergabe eines leeren iterablen Objekts), mit einem Array von Objekten, die das Ergebnis jedes Promises beschreiben.
Probieren Sie es aus
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
setTimeout(reject, 100, "foo"),
);
const promises = [promise1, promise2];
Promise.allSettled(promises).then((results) =>
results.forEach((result) => console.log(result.status)),
);
// Expected output:
// "fulfilled"
// "rejected"
Syntax
Promise.allSettled(iterable)
Parameter
iterable-
Ein iterierbares Objekt (wie ein
Array) von Promises. Diese Werte werden awaited, sodass auch andere thenables aufgelöst werden, während nicht-thenable Werte unverändert zurückgegeben werden.
Rückgabewert
Ein Promise, das:
-
Bereits erfüllt ist, wenn das übergebene
iterableleer ist. -
Asynchron erfüllt wird, wenn alle Promises im gegebenen
iterableabgeschlossen sind (entweder erfüllt oder abgelehnt). Der Erfüllungswert ist ein Array von Objekten, die jeweils das Ergebnis eines Promises imiterablebeschreiben, in der Reihenfolge der übergebenen Promises, unabhängig von der Abschlussreihenfolge. Jedes Ergebnisobjekt hat die folgenden Eigenschaften:status-
Ein String, entweder
"fulfilled"oder"rejected", der den endgültigen Status des Promises angibt. value-
Nur vorhanden, wenn
status"fulfilled"ist. Der Wert, mit dem das Promise erfüllt wurde. reason-
Nur vorhanden, wenn
status"rejected"ist. Der Grund, warum das Promise abgelehnt wurde.
Wenn das übergebene
iterablenicht leer ist, jedoch keine ausstehenden Promises enthält, wird das zurückgegebene Promise dennoch asynchron (anstatt synchron) erfüllt.
Beschreibung
Die Promise.allSettled() Methode ist eine der Promise-Konkurrenzmethoden. Promise.allSettled() wird typischerweise verwendet, wenn Sie mehrere asynchrone Aufgaben haben, die nicht voneinander abhängig sind, um erfolgreich abgeschlossen zu werden, oder wenn Sie immer das Ergebnis jedes Promises erfahren möchten.
Zum Vergleich: Das von Promise.all() zurückgegebene Promise könnte geeigneter sein, wenn die Aufgaben voneinander abhängig sind oder wenn Sie bei Ablehnung eines Promises sofort eine Ablehnung wünschen.
Beispiele
>Verwendung von Promise.allSettled()
Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
99,
Promise.reject(new Error("an error")),
]).then((values) => console.log(values));
// [
// { status: 'fulfilled', value: 33 },
// { status: 'fulfilled', value: 66 },
// { status: 'fulfilled', value: 99 },
// { status: 'rejected', reason: Error: an error }
// ]
Sie können die Ergebnisse auch destrukturieren, um für jedes Ergebnis einer Erledigung eine eigene Variable zu haben.
const [status1, status2] = Promise.allSettled([
Promise.resolve(33),
new Promise((resolve) => setTimeout(() => resolve(66), 0)),
]);
// status1 = { status: 'fulfilled', value: 33 }
// status2 = { status: 'fulfilled', value: 66 }
Wenn Sie das Ergebnis destrukturieren, müssen Sie die Ergebnisvariablen in der gleichen Reihenfolge halten wie die Eingabepromises; eine Abweichung kann subtile Fehler verursachen. Die Methode Promise.allSettledKeyed() vermeidet dieses Problem, indem sie jede Eingabe und Ausgabe mit einem Schlüssel verknüpft.
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-promise.allsettled> |