今天我正在听一节 Javascript 课,他们讲了一些我以前没见过而且我不完全理解的东西。我会尽量从内存中重现
老师没有使用 Promise 的 catch
来处理错误,我已经习惯了,而是使用 try...catch
包裹了 Promise 及其然后
。当我问他为什么这样做时,他说这是为了“同步”捕获错误。也就是说,而不是我习惯的以下格式(我使用的是伪代码)
someLibrary.someFunctionThatReturnsAPromise
.then(() => something)
.then(() => somethingElse)
.catch(err => reportError)
他是这样做的
try {
someLibrary.someFunctionThatReturnsAPromise
.then(() => something)
.then(() => somethingElse)
}
catch(err) {
reportError
}
这两种捕获错误的方法有什么区别? 包装异步的 Promise 如何以同步方式报告错误?
感谢您的任何见解!
最佳答案
try-catch
不会捕获 <somePromise>.then
附近的异步错误因为正如您所注意到的,该 block 将在 promise 完成/可能抛出之前退出。
但是,如果您使用的是 async
/await
然后是 try-catch
将捕获,因为该 block 将等待 await
:
async function foobar() {
try {
await doSomePromise();
} catch (e) {
console.log(e);
}
}
关于javascript - 使用 Promise.catch() 和在 try...catch 中包装 Promise 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53232517/