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 Oktober 2018 browserübergreifend verfügbar.
Die finally()-Methode von Promise-Instanzen plant eine Funktion ein, die aufgerufen wird, wenn das Promise beendet ist (entweder erfüllt oder abgelehnt). Sie gibt sofort ein weiteres Promise-Objekt zurück, wodurch es möglich ist, Aufrufe zu anderen Promise-Methoden zu verketten.
Wie der finally Block ist diese Methode normalerweise für Aufräumarbeiten gedacht, unabhängig vom Ergebnis des Promises. Es ermöglicht Ihnen, Code in den then() und catch() Handlern des Promises zu vermeiden.
Eine Funktion, die asynchron ausgeführt wird, wenn dieses Promise beendet ist. Wenn die Funktion ein Promise zurückgibt, wartet das resultierende Promise darauf, dass dieses Promise beendet wird, bevor es fortfährt. Wenn das zurückgegebene Promise abgelehnt wird, wird das resultierende Promise mit demselben Grund abgelehnt. Jeder andere zurückgegebene Wert oder der erfüllte Wert des zurückgegebenen Promises wird ignoriert.
Gibt sofort ein neues Promise zurück. Dieses neue Promise ist immer ausstehend, wenn es zurückgegeben wird, unabhängig vom Status des aktuellen Promises. Wenn onFinally einen Fehler auslöst oder ein abgelehntes Promise zurückgibt, wird das neue Promise mit diesem Wert abgelehnt. Andernfalls wird das neue Promise mit demselben Status wie das aktuelle Promise beendet.
Die finally()-Methode kann nützlich sein, wenn Sie einige Verarbeitung oder Aufräumarbeiten durchführen möchten, sobald das Promise beendet ist, unabhängig von seinem Ergebnis.
Die finally()-Methode ist sehr ähnlich wie das Aufrufen von then(onFinally, onFinally). Es gibt jedoch ein paar Unterschiede:
Hinweis: Ein throw (oder das Zurückgeben eines abgelehnten Versprechens) im finally-Callback lehnt das zurückgegebene Promise weiterhin ab. Zum Beispiel lehnen sowohl Promise.reject(3).finally(() => { throw 99; }) als auch Promise.reject(3).finally(() => Promise.reject(99)) das zurückgegebene Promise mit dem Grund 99 ab.
Wie catch() ruft finally() intern die then-Methode für das Objekt auf, auf dem sie aufgerufen wurde. Wenn onFinally keine Funktion ist, wird then() mit onFinally als beide Argumente aufgerufen – was für Promise.prototype.then() bedeutet, dass kein nützlicher Handler angehängt ist. Andernfalls wird then() mit zwei intern erstellten Funktionen aufgerufen, die sich wie folgt verhalten:
Warnung: Dies dient nur Demonstrationszwecken und ist kein Polyfill.
Da finally() then() aufruft, unterstützt es das Subklassing. Zudem beachten Sie den Promise.resolve()-Aufruf oben — in Wirklichkeit wird der Rückgabewert von onFinally() unter Verwendung des gleichen Algorithmus wie Promise.resolve() aufgelöst, aber der tatsächliche Konstruktor, der verwendet wird, um das aufgelöste Promise zu konstruieren, wird die Unterklasse sein. finally() erhält diesen Konstruktor über promise.constructor[Symbol.species].
| ECMAScript® 2027 Language Specification # sec-promise.prototype.finally |
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.