Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Promise.race() statische Methode nimmt ein iterierbares Objekt von Promises als Eingabe und gibt ein einzelnes Promise zurück. Dieses zurückgegebene Promise nimmt den endgültigen Zustand des ersten Promise an, das sich erledigt.
Ein iterierbares Objekt (wie ein Array) von Promises.
Ein Promise, das asynchron erledigt wird mit dem endgültigen Zustand des ersten Promise im iterable, das sich erledigt. Mit anderen Worten, es erfüllt sich, wenn das erste Promise, das sich erledigt, erfüllt wird, und es lehnt ab, wenn das erste Promise, das sich erledigt, abgelehnt wird. Das zurückgegebene Promise bleibt für immer ausstehend, wenn das übergebene iterable leer ist. Wenn das übergebene iterable nicht leer ist, aber keine ausstehenden Promises enthält, wird das zurückgegebene Promise trotzdem asynchron (anstatt synchron) erledigt.
Die Methode Promise.race() ist eine der Methoden für Promise-Konkurrenz. Sie ist nützlich, wenn Sie möchten, dass die erste asynchrone Aufgabe abgeschlossen wird, sich jedoch nicht um deren endgültigen Zustand kümmern (d.h. sie kann entweder erfolgreich sein oder fehlschlagen).
Wenn das iterierbare Objekt einen oder mehrere Nicht-Promise-Werte und/oder ein bereits erledigtes Promise enthält, wird Promise.race() auf den ersten dieser Werte festgelegt, der im iterierbaren Objekt gefunden wird.
Dieses Beispiel zeigt, wie Promise.race() genutzt werden kann, um mehrere Timer, die mit setTimeout() implementiert sind, gegeneinander antreten zu lassen. Der Timer mit der kürzesten Zeit gewinnt immer das Rennen und bestimmt den Zustand des resultierenden Promises.
Das folgende Beispiel zeigt die Asynchronität von Promise.race. Anders als andere Methoden der Promise-Konkurrenz ist Promise.race immer asynchron: Es wird nie synchron erledigt, selbst wenn das iterable leer ist.
Ein leeres iterierbares Objekt führt dazu, dass das zurückgegebene Promise für immer ausstehend bleibt:
Wenn das iterierbare Objekt einen oder mehrere Nicht-Promise-Werte und/oder ein bereits erledigtes Promise enthält, wird Promise.race auf den ersten dieser Werte festgelegt, der im Array gefunden wird:
Sie können eine möglicherweise lang anhaltende Anfrage mit einem Timer, der ablehnt, konkurrieren lassen, sodass das resultierende Promise automatisch abgelehnt wird, wenn das Zeitlimit abgelaufen ist.
Wenn sich das data Promise erfüllt, wird es die von /api abgerufenen Daten enthalten; andernfalls wird es abgelehnt, wenn fetch für 5 Sekunden ausstehend bleibt und das Rennen mit dem setTimeout Timer verliert.
Da Promise.race() sich auf das erste nicht ausstehende Promise im iterierbaren Objekt einlässt, können wir den Zustand eines Promises überprüfen, einschließlich ob es ausstehend ist. Dieses Beispiel ist von promise-status-async adaptiert.
In dieser Funktion, wenn promise ausstehend ist, wird der zweite Wert, pendingState, der kein Promise ist, zum Ergebnis des Rennens; andernfalls, wenn promise bereits erledigt ist, können wir seinen Zustand durch die onFulfilled und onRejected Handler erfahren. Beispiel:
Hinweis: Die Funktion promiseState läuft immer noch asynchron, da es keinen Weg gibt, den Wert eines Promises synchron zu erhalten (d.h. ohne then() oder await), selbst wenn es bereits erledigt ist. Allerdings wird promiseState() immer innerhalb eines Ticks erfüllt und wartet tatsächlich nie auf die Erledigung eines Promises.
Promise.race nimmt das erste erledigte Promise.
Promise.any nimmt das erste erfüllte Promise.
| ECMAScript® 2027 Language Specification # sec-promise.race |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.