【发布时间】:2018-12-18 22:09:53
【问题描述】:
我是 ES6 的新手,所以我研究 Javascript 的语句。
在测试 async/await 时,我发现了一些奇怪的行为。
我是这样写代码的,
const test = async () => {
await setTimeout(() => {
console.log("timeout");
}, 2000);
await console.log(1);
await console.log(2);
}
test();
输出在这里,
1
2
timeout
[Finished in 2.1s]
我将异步定义为功能并等待每一行同步工作。
预期的输出在这里,
timeout
1
2
[Finished in 2.1s]
为什么这段代码不能同步工作?
谢谢。
【问题讨论】:
-
你不能
await setTimeout(有意义地)因为setTimeout不返回Promise。 -
async/await是处理 promises 的语法糖。如果函数没有返回承诺,那么await并没有真正的帮助。await setTimeout()与setTimeout()具有相同的效果。 Read the MDN documentation aboutawait. -
你也不能等待 console.log。
-
@CertainPerformance 谢谢。那么如何修复该代码以使其正常工作?
-
创建一个返回
Promise的函数。 (或者只是awaitPromise)
标签: javascript ecmascript-6 async-await