In der Bluebird Promise-Dokumentation steht .then(success, fail) wird als Antimuster bezeichnet. Was ist der Grund dafür?
Im Gegensatz zur empfohlenen .then(success).catch(fail)-Verkettung stellt die Verwendung von .then(success, fail) ein Kontrollflussproblem dar:
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); }
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:
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!