Javascript 当关键字后面的表达式的计算结果不符合承诺时,“await”会发生什么情况?
我有这样的ES7代码Javascript 当关键字后面的表达式的计算结果不符合承诺时,“await”会发生什么情况?,javascript,async-await,ecmascript-next,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)) 在var threeP=await three行应该发生什么 代码是否应按预期继续,或者失败,因为three不是承诺 在中,它被称为“有
async function returnsfive() {
var three = 3;
var threeP = await three;
return threeP+2;
}
returnsfive().then(k=>console.log(k), e=>console.error("err", e))
在var threeP=await three
行应该发生什么
代码是否应按预期继续,或者失败,因为three
不是承诺
在中,它被称为“有争议的语法和语义”。我无法通过阅读官方文件找到确切的定义,因为它太技术化了
默认babel.js转换日志为预期的5;但是,nodent
-一个不同的转换-打印TypeError:three.then不是一个函数
。哪个是正确的,为什么是正确的?根据,运行时应首先将等待的值“转换”为承诺:
异步函数等待(值)
asyncContext
作为正在运行的执行上下文承诺成为!新承诺能力(%Promise%)
解析结果成为!调用(promiseCapability.[Resolve]],未定义,值)
wait 3
相当于wait Promise.resolve(3)
,巴贝尔正确地实现了规范
另一方面是点头。如果您希望首先将所有等待的值包装在承诺中,则有一个
wrapAwait
选项可用,但nodent文档报告这可能会影响性能。async/await
不是ES7的一部分。这是一个提议。谢谢你编辑标签!