IE
async asyncfunction(){
try{
await method1();
await method2();
}
catch(error){
console.log(error);
}
}
给定 method1() 和 method2() 是异步函数。每个 await 方法都应该有一个 try/catch 块吗?有没有更简洁的方式来写这个?我试图避免“.then”和“.catch”链接。
原文由 williamsi 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用一个包含多个
await
操作的 try/catch 块在等待await
一元运算符右侧创建的承诺时很好:await
运算符存储其父级async
函数的执行上下文并返回到事件循环。await
运算符的执行在其操作数的稳定状态和值被回调时恢复。恢复后,
await
恢复先前保存的执行上下文并返回操作数承诺的实现值作为await
表达式的结果,或抛出拒绝操作数的拒绝原因。try/catch
块调用是保存和恢复前后执行上下文的一部分。因此,多个await
操作不会干扰它们共享的外部try
块的行为。catch
块将被调用,拒绝原因是在被拒绝的try
块中等待的任何承诺。但是,如果代码
await
在同一个try/catch
块中存在多个现有承诺,并且不止一个承诺被拒绝,则除了第一个拒绝之外的所有承诺都会生成未捕获的承诺拒绝错误。感谢@EyolRoth 提供此警告,请结合此问题阅读他的完整 答案。