Heim >Web-Frontend >js-Tutorial >Warum wird „.then(success, fail)' als Anti-Pattern bei der Handhabung von Versprechen betrachtet?

Warum wird „.then(success, fail)' als Anti-Pattern bei der Handhabung von Versprechen betrachtet?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 18:42:14769Durchsuche

Why is `.then(success, fail)` Considered an Anti-pattern in Promise Handling?

Nachteile der Verwendung von .then(success, fail) für die Promise-Verarbeitung

Frage:

In der Bluebird Promise-Dokumentation steht .then(success, fail) wird als Antimuster bezeichnet. Was ist der Grund dafür?

Antwort:

Im Gegensatz zur empfohlenen .then(success).catch(fail)-Verkettung stellt die Verwendung von .then(success, fail) ein Kontrollflussproblem dar:

  • Wenn im Erfolgsrückruf ein Fehler auftritt, wird dieser an die nächste .catch()-Datei weitergegeben. Handler, wodurch der Fail-Rückruf effektiv übersprungen wird.

Vergleich der Kontrollflüsse:

Verwendung von .then(success, fail):

try {
    results = some_call();
} catch (e) {
    logger.log(e);
    break then;
} else
    logger.log(results);

Verwenden .then(success).catch(fail):

try {
    var results = some_call();
    logger.log(results);
} catch (e) {
    logger.log(e);
}

Begründung:

Vom Antimuster wird abgeraten, da es die Fehlerbehandlung auf einen einzigen letzten Catch-Handler beschränkt. Es kann jedoch in Szenarien nützlich sein, in denen:

  • Sie Fehler in einem bestimmten Rückrufschritt behandeln möchten.
  • Sie benötigen eine unterschiedliche Behandlung für Fehler- und Nichtfehlerfälle (Verzweigung der Kontrollfluss).

Verfeinerung:

Um wiederholte Rückrufe zu vermeiden, können Sie Folgendes verwenden Muster:

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 für diesen Zweck die Methode .finally() nutzen.

Das obige ist der detaillierte Inhalt vonWarum wird „.then(success, fail)' als Anti-Pattern bei der Handhabung von Versprechen betrachtet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn