【发布时间】:2016-09-27 10:36:53
【问题描述】:
如果async 函数同步抛出异常会怎样?
例子:
async function whatHappen () {
throw new BombError()
// no "await" here
}
try {
whatHappen().catch(() => console.error('rejected'))
} catch (e) {
console.error('thrown')
}
我在 Babel 中运行了这个示例,似乎 throw 被自动捕获并转换为被拒绝的承诺,因此该示例会将 "rejected" 记录到控制台。
但这是否反映了实际规范以及它将如何在 JavaScript 引擎中实现?我已经尝试阅读technical proposal,但该规范显然不是针对语言用户,而是针对语言实施者。
我可以依靠async 函数来始终返回一个承诺,还是在某些情况下它们可能会同步抛出异常?是否有任何情况下调用没有await 的异步函数应该包装在try/catch 块中?
【问题讨论】: