Kar*_*lek 10 javascript async-await ecmascript-next
我有这样的ES7代码.
async function returnsfive() {
var three = 3;
var threeP = await three;
return threeP+2;
}
returnsfive().then(k=>console.log(k), e=>console.error("err", e))
Run Code Online (Sandbox Code Playgroud)
该var threeP = await three线应该怎么办?
代码应该按预期继续,还是失败,因为three这不是承诺?
在这个repo中,它被称为"Debatable Syntax&Semantics".我无法阅读官方文档以找到确切的定义,因为它太技术性了.
默认的babel.js转换按预期记录5; 然而,nodent- 一个不同的变换 - 打印TypeError: three.then is not a function.哪个是正确的,为什么?
根据当前的工作草案规范,运行时应首先将等待的值"转换"为承诺:
AsyncFunctionAwait(value)
- 让我们
asyncContext运行执行上下文.- 我们
promiseCapability是! NewPromiseCapability(%Promise%).- 我们
resolveResult是! Call(promiseCapability.[[Resolve]], undefined, value).- ...
第2步和第3步的组合大致相当于调用Promise.resolve(value),它创建了一个使用给定值解析的新承诺,或者 - 如果值是一个值,那么将遵循那个值.
换句话说:await 3相当于await Promise.resolve(3),并且Babel正确实现了规范.
另一方面,nodent 故意不支持默认等待非承诺.wrapAwait如果您希望所有等待的值首先包含在承诺中,那么可以使用一个选项,但nodent文档报告这可能会影响性能.
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |