Was ist der Unterschied zwischen den Q. Promise-Bibliotheken .finally () und .done ()?

8

Was ist der Unterschied zwischen den Anweisungen final () und .done () der Nodejs Q promise-Bibliothek?

Zum Beispiel was ist der Unterschied zwischen diesen beiden?

%Vor%     
Todd Bluhm 25.09.2014, 05:12
quelle

2 Antworten

17

promise.done(onSuccess, onError) ermöglicht Ihnen einfach, den aufgelösten Wert zu verarbeiten. Ein zusätzlicher Vorteil ist, dass kein Fehler beim Schlucken (wie bei promise.then() ) impliziert wird, es garantiert, dass jede betroffene Ausnahme offengelegt wird. Es beendet auch effektiv die Kette und gibt kein weiteres Versprechen zurück.

promise.finally(fn) dient zum Registrieren einer Aufgabe, die ausgeführt werden muss, nachdem eine gegebene Zusage aufgelöst wurde (es spielt keine Rolle, ob die Zusage erfolgreich ist oder fehlschlägt). Normalerweise verwenden Sie es für eine Art von Bereinigungsoperationen, z. Stellen Sie sich vor, Sie richten einen Fortschrittsbalken ein, der nach dem Erledigen der Anfrage ausgeblendet werden muss (egal ob er erfolgreich war), dann tun Sie einfach promise.finally(hideProgressBar) . Außerdem gibt promise.finally() die Eingabeversprechung zurück, sodass Sie sie zur weiteren Verarbeitung zurückgeben können.

    
Mariusz Nowak 25.09.2014, 10:59
quelle
8

Der Unterschied liegt in der Verkettung und Fehlerbehandlung sowie in der Fehlerprotokollierung:

%Vor%

Hier wird% ce_de% weiterhin ausgeführt, wenn% code_% thront, aber kein Fehler wird protokolliert. In Q then wird ausgeführt, unabhängig davon, ob finally erfolgreich ist oder nicht. Dies ist wie das finally Schlüsselwort in JS .then . Es ist auch möglich, in diesem Fall zusätzliche finally s an die Kette zu ketten.

%Vor%

Hier zeigt try/catch/finally an, dass die Versprechenskette beendet wurde, Sie können nicht mehr daran ketten. Wenn du es nur an einen onFulilled-Handler übergibst, wird es nicht ausgeführt, wenn% code_de% geworfen hat, und es werden Fehler protokolliert, wenn es mit einer Ausnahme endet.

    
Benjamin Gruenbaum 25.09.2014 10:30
quelle

Tags und Links