【发布时间】:2018-05-29 22:21:56
【问题描述】:
我目前正在探索 javascript 中 async/await 的概念。我知道 async 函数返回一个应该在未来解决的承诺,并且它不会阻止代码的自然执行。这里我有一个代码我写来测试javascript的异步执行。
console.log("1")
async function asyncFunc(){
for(i=0;i<10000000;i++){
}
console.log("3")
}
asyncFunc().then(()=>{console.log('4')});
console.log("2");
我除了代码将按以下方式执行:
第一个 console.log() 打印 1
其次调用异步函数。由于异步代码是非阻塞的,最后一个 console.log() 将执行并因此在控制台中打印 2。
async 函数中的 console.log() 将被执行并在控制台中打印 3。
最后,promise 将被解析,
then中的 console.log() 将被执行并打印 4。如此预期的输出:1,2,3,4
但实际上我得到的输出是 1,3,2,4。
为什么它会这样,而不是我预期的方式
【问题讨论】:
-
不幸的是,aync 关键字实际上并没有使函数中的代码异步。
-
如果要强制函数异步运行,则在函数的第一行添加
await Promise.resolve()。
标签: javascript asynchronous async-await