Umgang mit Js Versprechen Ablehnung
Wie handhaben Sie einen Fehler (zB. "neue Fehler" unten), die außerhalb des Versprechen?
function testError() {
throw new Error("new error") //how to handle this?
var p123 = new Promise(function(resolve, reject) {
resolve(123)
});
return p123
};
testError().catch(err => {
return err; //code doesn't come here
})
.then(ok => {
console.log(ok)
});
- Verwenden
try/catch
- Sie haben zu werfen, die Fehler in dem Versprechen, Funktion für den .catch() zu arbeiten.
- Siehe Wie kann ich fangen eine asynchrone Fehler mit JS verspricht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht sicher sind, ob eine Funktion werfen (oder einen Wert zurückgeben) synchron, Sie können es nennen, mit
.then()
. Dadurch wird wickeln Sie es so, dass das Ergebnis behandelt werden konsequent, egal wie es produziert wird:JS:
Seit dem Fehler nicht um die async-code, eine regelmäßige
try-catch
tun sollte, feinen hier:Beachten Sie, dass, wenn die
async-await
Muster wird schließlich die native Weg der Lösung verspricht, dietry-catch
wird auch als native Art des Umgangs mit Fehlern:Wie man leicht überprüfen kann, diese korrekt verarbeitet sowohl die sync und async-Fehler und ist viel sauberer als
then-catch
.try-catch
bietet die ultimative Homogenität.async
/await
verfügbar sind, nicht aber, wenn Sie nicht verfügbar sind.Da der Fehler ausgelöst wird, die außerhalb der verspricht, Sie nicht fangen Sie ihn mit einem Versprechen catch-Anweisung.
Können Sie mit einem try/catch den Fehler, statt.
Wenn Sie können, schreiben Sie Ihre
testError
Funktion wie soJS:
console.error
throw
Linie zu sehen, die Versprechen, beheben erfolgreichDu ihn neu schreiben, weil die Anrufer-check für beide Ausnahmen und Ablehnungen ist ein anti-Muster:
JS:
Dies ist implizit mit
async
Funktionen; Sie immer wieder ein Versprechen:JS: