[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/allKeyed [Back]  [Original]

Promise.allKeyed() - JavaScript | MDN

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.allKeyed()

Experimentell: Dies ist eine experimentelle Technologie
berprfen Sie die Browser-Kompatibilittstabelle sorgfltig vor der Verwendung auf produktiven Webseiten.

Die statische Methode Promise.allKeyed() hnelt Promise.all(), verwendet jedoch Objekte anstelle von Arrays/Iterables als Eingangs- und Ausgangsdaten. Sie nimmt ein Objekt, bei dem jeder eigene Schlssel mit einem Promise verknpft ist, und gibt ein einziges Promise zurck. Dieses zurckgegebene Promise wird erfllt, wenn alle Promises der Eingabe erfllt sind, und liefert ein Objekt mit denselben Schlsseln, die auf die entsprechenden Erfllungswerte gemappt sind. Es wird abgelehnt, wenn eines der Promises der Eingabe abgelehnt wird, mit dem ersten Ablehnungsgrund.

Im Vergleich zu Promise.all() ermglicht Promise.allKeyed() es Ihnen, Ergebnisse mit semantisch sinnvollen Schlsseln zu verknpfen, anstatt mit einer beliebigen Array-Reihenfolge, die schwierig zu pflegen sein kann.

In diesem Artikel

Syntax

js
Promise.allKeyed(object)

Parameter

object

Ein Objekt. Alle eigenen enumerierbaren Eigenschaften, unabhngig davon, ob der Schlssel ein String oder ein Symbol ist, sollten Promise-Werte haben. Diese Werte werden abgewartet, sodass auch andere Thenables aufgelst werden, whrend Nicht-Thenables unverndert zurckgegeben werden.

Rckgabewert

Ein Promise, das:

  • Bereits erfllt ist, wenn das bergebene object keine eigenen enumerierbaren Eigenschaften hat.
  • Asynchron erfllt, wenn alle Promises im angegebenen object erfllt sind. Der Erfllungswert ist ein Objekt mit Erfllungswerten, mit denselben Schlsseln in derselben Reihenfolge wie das bergebene object, unabhngig von der Reihenfolge der Fertigstellung. Wenn das bergebene object nicht leer ist, aber keine ausstehenden Promises enthlt, wird das zurckgegebene Promise dennoch asynchron (anstelle von synchron) erfllt.
  • Asynchron abgelehnt, wenn eines der Promises im angegebenen object abgelehnt wird. Der Ablehnungsgrund ist der Ablehnungsgrund des ersten abgelehnten Promises.

Beschreibung

Die Methode Promise.allKeyed() ist eine der Methoden zur Promise-Konkurrenz. Sie fhrt dieselbe Art von Aufgaben aus wie Promise.all(). Allerdings haben Sie oft nicht bereits ein Array von Promises, sondern stattdessen nur einige Ad-hoc-Operationen, die Sie bndeln mchten, sodass Sie sie in ein Array packen und dann sofort dekonstruieren:

js
const [resultA, resultB, resultC] = await Promise.all([getA(), getB(), getC()]);

Das Problem dabei ist, dass Sie die Konsistenz der Reihenfolge auf beiden Seiten aufrechterhalten mssen: Wenn Sie versehentlich [resultA, resultC, resultB] schreiben, wird Ihr Code nicht funktionieren.

Die keyed-Methode mildert das Problem, indem jede asynchrone Operation mit einem semantischen Schlssel verknpft wird:

js
const {
  a: resultA,
  b: resultB,
  c: resultC,
} = await Promise.allKeyed({
  a: getA(),
  b: getB(),
  c: getC(),
});

Auf diese Weise spielt die Reihenfolge keine Rolle mehr, und ein eventuelles Missverstndnis bei den Namen ist lokal: das versehentliche Schreiben von b: resultC ist nun viel leichter zu erkennen!

Beispiele

Verwendung von Promise.allKeyed()

Die Methode Promise.allKeyed() nimmt ein Objekt und verarbeitet alle seine eigenen enumerierbaren Eigenschaften.

js
function delayed(value, timeout) {
  return new Promise((res) => setTimeout(() => res(value), timeout));
}

const sym = Symbol();

const promises = {
  a: delayed("a", 500),
  // Symbol properties are processed
  [sym]: delayed("symbol", 300),
  // Nested properties are not processed; this whole object is treated as
  // an already-resolved value and returned as-is
  nested: {
    b: delayed("b", 100),
  },
};

const result = await Promise.allKeyed(promises);
console.log(result);
// {
//   a: "a",
//   [sym]: "symbol",
//   nested: {
//     b: <Promise>,
//   },
// }

Fr weitere Beispiele in Bezug auf das Konkurrenzverhalten, das Promise.all() und Promise.allKeyed() gemeinsam haben, siehe Promise.all().

Spezifikationen

Spezifikation
Await Dictionary
# sec-promise.allkeyed

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page