javascript - 使用 Promise.catch() 和在 try...catch 中包装 Promise 有什么区别?

标签 javascript try-catch es6-promise

今天我正在听一节 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/

相关文章:

c# - 代码未捕获 C# 中的 FormatException

java - 使用 try/catch 的正确方法

loops - Python 使用 try 和 except 进行循环

javascript - Promise 后的火灾事件

javascript - 跟踪用户绘制折线捕捉到道路 bing map

javascript - 如何使用 JavaScript/react 和 firebase 发送电子邮件?

javascript - Ajax 触发实时和动态表单

javascript - JQuery - 根据元素 innerHTML 更改 attr

javascript - 在 mongo db 文档模式中返回 Promise

javascript - 应该由 Promise 调用同步代码。然后创建一个新的 Promise