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
Freigeben: 2024-12-25 18:42:14
Original
777 Leute haben es durchsucht

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);
Nach dem Login kopieren

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

try {
    var results = some_call();
    logger.log(results);
} catch (e) {
    logger.log(e);
}
Nach dem Login kopieren

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);
   });
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage