Können Fehler von einem nicht erwarteten Async-Aufruf abgefangen, an eine ursprüngliche Kapselung von try/catch gesendet oder eine nicht abgefangene Ausnahme ausgelöst werden?Kann ich einen Fehler von async ohne Verwendung von erwarten?
Hier ist ein Beispiel dafür, was ich meine:
async function fn1() {
console.log('executing fn1');
}
async function fn2() {
console.log('executing fn2');
throw new Error('from fn2');
}
async function test() {
try {
await fn1();
fn2();
}
catch(e) {
console.log('caught error inside test:', e);
}
}
test();
In diesem Szenario wird die von fn2
geworfen Fehler leise geschluckt werden, und auf jeden Fall nicht von den ursprünglichen try/catch
gefangen. Ich glaube, dies ist das erwartete Verhalten, da fn2
höchstwahrscheinlich in die Ereignisschleife verschoben wird, um irgendwann in der Zukunft fertig zu werden, und test
ist es egal, wann es fertig ist (was beabsichtigt ist).
Gibt es eine Möglichkeit, sicherzustellen, dass Fehler nicht versehentlich von einer Struktur wie dieser verschluckt werden, anstatt try/catch
intern fn2
zu setzen und so etwas wie einen Fehler zu tun? Ich würde mich sogar mit einem nicht erfaßten Fehler begnügen, ohne zu wissen, wie man ihn fängt, denke ich - ich erwarte nicht, dass geworfene Fehler ein typischer Programmfluß mit dem sind, was ich schreibe, aber das Schlucken macht das Debuggen relativ nervig.
Seitliche Notiz, ich benutze Babel, um den Code mit der Babel-Laufzeit-Transformation zu transpilieren und mit Knoten auszuführen.
Ich bin mir nicht sicher, was Sie erreichen möchten, aber gibt es einen Grund, Versprechen nicht zu verwenden? – Tom
Verwenden Sie eine Versprechens-Bibliothek, die die Behandlung von unbehandelten Zurückweisungen unterstützt. – Bergi
Tom, nicht wirklich, nein. Ich war absichtlich mit async/warte auf Versprechungen zu sehen, was mit ES7-Syntax zu diesem Zeitpunkt getan werden könnte, und das war ein Problem, über das ich während des Spiels lief. Bergi, ich werde mich definitiv darauf zurückziehen, wenn es zu diesem Zeitpunkt keine anderen Möglichkeiten gibt (was vermutlich der Fall ist). – dvlsg