| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise/allKeyed | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
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.
Promise.allKeyed(object)
objectEin 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.
Ein Promise, das:
object keine eigenen enumerierbaren Eigenschaften hat.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.object abgelehnt wird. Der Ablehnungsgrund ist der Ablehnungsgrund des ersten abgelehnten Promises.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:
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:
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!
Die Methode Promise.allKeyed() nimmt ein Objekt und verarbeitet alle seine eigenen enumerierbaren Eigenschaften.
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().
| Spezifikation |
|---|
| Await Dictionary # sec-promise.allkeyed |
Promise.allKeyed in core-jsPromise.allKeyedPromisePromise.allSettledKeyed()Promise.all()PromiseObject/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |