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% 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.
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.
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.
Tags und Links javascript node.js promise q