我最近遇到了一个Javascript问题,它捕获错误并因此在引发异常时崩溃。
funcReturnPromise().then().catch()
我不得不将其更改为:
try {
funcReturnPromise().then()
} catch (e) {
...
}
找不到合适的解释,有没有可用的JS向导来启发JS农民?
答案 0 :(得分:3)
如果funcReturnPromise()
可以同步抛出(返回promise的函数通常永远不会执行),那么您就必须像使用常规.then()
时发现的那样,使用try / catch捕获该同步异常。 / p>
这是async
函数可以帮助您的地方。例如,如果您将funcReturnPromise
声明为async
,则它引发的同步异常将自动成为被拒绝的承诺,并且调用方永远不会暴露于同步异常。
或者,如果调用者(此处的代码)使用await,则可以使用相同的try/catch
捕获同步异常和拒绝的诺言。
例如,您可以执行以下操作:
async function myFunc()
try {
let result = await funcReturnPromise();
console.log(result);
} catch (e) {
// this catches both a rejected promise AND
// a synchronously thrown exception
console.log(e);
}
}