我已经阅读了async/await,在阅读了几篇文章之后,我决定自己测试一下。然而,我似乎不明白为什么这行不通:
async function main() {
var value = await Promise.resolve('Hey there');
console.log('inside: ' + value);
return value;
}
var text = main();
console.log('outside: ' + text);
控制台输出以下内容(节点v8.6.0):
> outside: [object Promise]
> inside:嘿,大家好
为什么函数内部的日志消息之后执行?我认为创建async/await的原因是为了使用异步任务执行同步执行。
是否有一种方法可以使用函数内部返回的值,而不使用main()后的.then() ?
顶级等待已经转移到阶段3阶段4(见namo的评论),所以你的问题的答案是我如何在顶级使用async/await ?就是使用await:
const text = await Promise.resolve('Hey there');
console.log('outside: ' + text)
如果你想要main()函数:在main()调用中添加await:
async function main() {
var value = await Promise.resolve('Hey there');
console.log('inside: ' + value);
return value;
}
var text = await main();
console.log('outside: ' + text)
兼容性
v8自2019年10月起
Chrome DevTools, Node.js和Safari web检查器中的REPL
标志后面的节点v13.3+——harmony-top-level-await
TypeScript 3.8+(发行)
Deno自2019年10月起
Webpack@v5.0.0-alpha.15