javascript - 我可以在异步函数的 try/catch block 中使用多个 'await' 吗?

标签 javascript asynchronous

async asyncfunction(){
  try{
    await method1();
    await method2();
  }
  catch(error){
    console.log(error);
  }
}

给定 method1() 和 method2() 是异步函数。每个 await 方法都应该有一个 try/catch block 吗?有没有更简洁的方式来写这个?我试图避免“.then”和“.catch”链接。

最佳答案

当等待在 await 一元运算符右侧创建的 promise 时,使用一个包含多个 await 操作的 try/catch block 很好:

await 运算符存储其父 async 函数的执行上下文并返回到事件循环。 await 运算符的执行在其操作数的稳定状态和值被回调时恢复。

恢复时,await 恢复之前保存的执行上下文,并返回操作数 promise 的 fulfilled 值作为 await 表达式的结果,或者抛出被拒绝的拒绝原因操作数。

try/catch block 调用在保存和恢复之前和之后都是执行上下文的一部分。因此,多个 await 操作不会干扰它们共享的外部 try block 的行为。 catch block 将被调用,并带有在被拒绝的 try block 中等待的任何 promise 的拒绝原因。

但是,如果代码 await 在同一个 try/catch block 中有多个现有的 promise,并且不止一个 promise 被拒绝,则会为所有 promise 生成一个未捕获的 promise 拒绝错误但第一次拒绝。感谢@EyolRoth 提供此警告,请阅读他的全部 answer与这个结合。

关于javascript - 我可以在异步函数的 try/catch block 中使用多个 'await' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557259/

相关文章:

javascript - Backbone.history.navigate 和 this.router.navigate 之间有什么区别

c# - 每 3 秒显示一次程序运行时间

c# - foreach 循环中的异步调用

javascript - 您将如何实现 1. 具有事件合并功能的异步事件队列

javascript - 视野中的黄色物体 - 三个 JS

javascript - javascript 中的照片库

javascript - Bootstrap 模式窗口未关闭

java - 在方法上使用 @Async 注释时来自 CglibAopProxy 的 NPE

angular - 如何使用 observables 在 angular2 中异步绑定(bind)下拉列表?

javascript - 使用 jquery 验证条件时显示警报