Heim >Web-Frontend >js-Tutorial >Wann ist die Verwendung von „.then(success, fail)' ein Antimuster in Promises?
In den Bluebird Promise FAQ ist .then(success, fail) markiert als Antimuster. Dies kann verwirrend sein, insbesondere wenn Sie die Erklärung zu Try- und Catch-Anweisungen nicht verstehen.
Der .then()-Aufruf gibt ein Versprechen zurück, das abgelehnt wird, wenn der Rückruf einen Fehler auslöst. Das heißt, wenn die Erfolgsprotokollierung fehlschlägt, wird der Fehler an den folgenden .catch()-Rückruf weitergeleitet, nicht an den fehlgeschlagenen Rückruf, der den Erfolg begleitet.
Der Kontrollfluss für .then mit zwei Argumenten und einer .then-catch-Kette ist unten dargestellt:
[Bild von Kontrollflussdiagrammen für .then und .then-catch Kette]
Um dies in synchronem Code auszudrücken:
// some_promise_call().then(logger.log, logger.log) then: { try { var results = some_call(); } catch(e) { logger.log(e); break then; } // else logger.log(results); }
Vergleichen Sie dies mit:
// some_promise_call().then(logger.log).catch(logger.log) try { var results = some_call(); logger.log(results); } catch(e) { logger.log(e); }
In diesem Fall übernimmt der Catch-Logger die Verarbeitung Ausnahmen vom Success-Logger-Aufruf.
Das Argument gegen dieses Muster ist, dass Sie generell Fehler in jedem Verarbeitungsschritt abfangen und die Verwendung vermeiden sollten es in Ketten. Es wird erwartet, dass Sie nur einen letzten Behandler für alle Fehler haben.
Dieses Muster ist jedoch hilfreich, wenn Sie bestimmte Fehler in einem bestimmten Schritt behandeln und eine andere Aktion ergreifen, wenn kein Fehler auftritt. Beachten Sie, dass dadurch Ihr Kontrollfluss verzweigt wird.
Bedenken Sie Folgendes:
some_promise_call() .catch(function(e) { return e; // it's OK, we'll just log it }) .done(function(res) { logger.log(res); });
Alternativ können Sie .finally() für diesen Zweck verwenden.
Das obige ist der detaillierte Inhalt vonWann ist die Verwendung von „.then(success, fail)' ein Antimuster in Promises?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!