Ala*_*lum 1 javascript async-await
如果async函数同步抛出异常会发生什么?
例:
async function whatHappen () {
throw new BombError()
// no "await" here
}
try {
whatHappen().catch(() => console.error('rejected'))
} catch (e) {
console.error('thrown')
}
Run Code Online (Sandbox Code Playgroud)
我在Babel中运行了这个例子,它似乎throw被自动捕获并转换为被拒绝的promise,因此该示例将登录"rejected"到控制台.
但这是否反映了实际规范以及如何在JavaScript引擎中实现?我曾尝试阅读技术提案,但该规范显然不是针对语言用户而是针对语言实现者.
我是否可以依赖async函数来总是返回一个promise或者是否存在可能同步抛出异常的情况?有没有调用异步函数的情况await应该包含在try/ catchblock中?
是的,异步函数总是返回一个Promise.
在您链接的技术提案中,开头有句话说明:
在ES6讨论期间,与延期职能部门提出了类似的建议.这里的提议支持相同的用例,使用相似或相同的语法,但直接构建与生成器并行的控制流结构,并使用promises返回类型,而不是定义自定义机制.
(强调我的)
因此,不存在需要在try/catch块中包装异步函数的情况,因为它不会抛出同步错误.
PS:我刚刚看到Chrome Canary和MS Edge在标志后面实现了异步/等待,所以你也可以在那里测试它.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |