JavaScript-Versprechen: Das Rätsel zwischen Ablehnen und Werfen
Bei der Arbeit mit JavaScript-Versprechen stehen Entwickler oft vor einem Dilemma: Sollten sie Versprechen verwenden? .ablehnen oder einfach einen Fehler auslösen? Obwohl beide Methoden einem ähnlichen Zweck dienen, herrscht Verwirrung hinsichtlich ihrer Unterschiede und potenziellen Vorteile.
Untersuchung der Ähnlichkeiten
Letztendlich gibt es keinen inhärenten Vorteil bei der Verwendung von Promise.reject über das Auslösen eines Fehlers oder umgekehrt. Beide Mechanismen versetzen das Versprechen in den abgelehnten Zustand und lösen die Ausführung des .catch- oder Catch()-Handlers aus.
Enthüllung einer subtilen Unterscheidung
Allerdings ein spezifischer Fall existiert dort, wo das Auslösen eines Fehlers nicht ausreicht: asynchrone Rückrufe außerhalb von Versprechensrückrufen. In diesen Situationen ist Promise.reject die einzige Option, um der Promise-Kette den abgelehnten Status bekannt zu machen.
Betrachten Sie das folgende Beispiel:
new Promise(function() {
setTimeout(function() {
throw 'or nah';
// Using Promise.reject('or nah') also won't work in this case
}, 1000);
}).catch(function(e) {
console.log(e); // doesn't happen
});
In diesem Szenario wird der im setTimeout-Rückruf ausgelöste Fehler nicht vom .catch-Handler abgefangen, da er nicht innerhalb eines Promise-Rückrufs ausgeführt wird. Um diese Art von Situation effektiv zu bewältigen, muss Promise.reject innerhalb des asynchronen Rückrufs verwendet werden.
Auswahl der besten Vorgehensweise
Im Allgemeinen entweder Promise.reject oder throwing Ein Fehler kann verwendet werden, um ein Versprechen in den abgelehnten Zustand zu versetzen. Wenn jedoch mit asynchronen Rückrufen außerhalb von Promise-Rückrufen gearbeitet wird, ist Promise.reject die einzig praktikable Option.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3