Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
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 iterable leer ist.

  • Asynchron erfüllt wird, wenn alle Promises im gegebenen iterable abgeschlossen sind (entweder erfüllt oder abgelehnt). Der Erfüllungswert ist ein Array von Objekten, die jeweils das Ergebnis eines Promises im iterable beschreiben, 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 iterable nicht 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()

js
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.

js
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

Browser-Kompatibilität

Siehe auch