即
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/