Der Autor der Notiz, deren Übersetzung wir heute veröffentlichen, sagt, dass er es kaum unterlassen hat, sie nicht "Endlich - die Gelegenheit, auf die alle gewartet haben" zu nennen oder irgendwie über dieses Thema zu scherzen. Am Ende entschied er sich, auf Witze zu verzichten und nur über die wirklich wichtige und nützliche Funktion von Promise-Objekten zu sprechen.
Wenn Sie gerade erst anfangen, JavaScript zu lernen, und mit Versprechungen nicht sehr vertraut sind (manchmal werden sie als "Versprechungen", "versprochene Ergebnisse", "Versprechensobjekte" bezeichnet), sind Sie möglicherweise an unseren früheren Veröffentlichungen zu diesem Thema interessiert:
→
Versprechen in ES6: Muster und Anti-Muster→
JavaScript: asynchrone Programmiermethoden→
JavaScript ES8 und Übergang zu async / await→
Async / warten: 6 Gründe, Versprechen zu vergessen→
Flucht aus der Hölle asynchron / warten→
JavaScript ES6: weniger schreiben - mehr tun→
Promises Guide für diejenigen, die sie aussortieren möchten→
JavaScript async / await Design: Stärken, Fallstricke und Verwendungsmuster→
Versprechen in JavaScript verwendenPromise.prototype.finally Methode
Abschnitt
25.6.5.3 des ECMAScript 2018-Standards ist der
Promise.prototype.finally-Methode gewidmet . Laut
caniuse.com beträgt der Unterstützungsgrad für diese Methode ungefähr 81%. Diese Methode kann auch in Node.js verwendet werden.
Die Methode des
finally
Versprechens ist eine der wichtigsten Neuerungen des Standards, mit der Sie eine Funktion angeben können, die unabhängig vom Ergebnis des Versprechens ausgeführt wird. Eine solche Funktion wird erfüllt, wenn das Versprechen erfolgreich gelöst und abgelehnt wird.
Betrachten Sie ein Beispiel:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); });
Dies ist ein weit verbreitetes Versprechen, das nach 2000 Millisekunden aufgelöst wird. Wenn wir danach eine Aktion ausführen müssen, benötigen wir einen
then
Block:
myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } );
Zwei anonyme Funktionen werden an die
then
Methode übergeben. Der erste wird ausgeführt, wenn das Versprechen erfolgreich gelöst wurde. Das zweite ist, wenn es abgelehnt wird. Unser Versprechen wird immer erfolgreich erfüllt, die
success!!!
wird immer in der Konsole angezeigt
success!!!
. All dies ist sehr gut, aber was ist, wenn bestimmte Maßnahmen nach Ablehnung des Versprechens und nach erfolgreichem Abschluss seiner Arbeit durchgeführt werden müssen? Hier hilft uns die Methode
finally
:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ).finally(finallyMessage => { console.log('FINALLY!!')});
Unabhängig davon, wie das Versprechen seine Arbeit abschließt, wird zusätzlich zur entsprechenden Nachricht der Text
FINALLY!!
, was uns sagt, dass die an die
finally
Methode übergebene Rückruffunktion trotzdem funktioniert. Um dies zu überprüfen, können Sie
experimentieren .
Zusammenfassung
Die Tatsache, dass die Promise.prototype.finally-Methode in ES2018 veröffentlicht wurde, lässt darauf schließen, dass wir in absehbarer Zukunft ein sehr hohes Maß an Browserunterstützung erwarten können. Dies bedeutet, dass das, was Sie zuvor von Hilfstools von Drittanbietern erstellt hatten, jetzt mit Standardtools implementiert werden kann.
In welchen Situationen kann die
Promise.prototype.finally
Methode nützlich sein? Wenn Sie beispielsweise beim Starten des Versprechens, mit dem etwas heruntergeladen wurde, eine Animation abspielen, können Sie diese Animation
finally
abschließen. Im
finally
Block können Sie beispielsweise ein bestimmtes modales Fenster schließen. Tatsächlich gibt es viele Situationen, in denen die Methode
finally
nützlich sein kann.
Liebe Leser! Haben Sie vor der Standardimplementierung Ersatz für die Methode der endgültigen Versprechen verwendet?
