use*_*778 -1 javascript node.js async-await es6-promise
我有这个简单的代码:
(async ()=>{
const five = await printHello()
console.log(`five: ${five}`);
})()
async function printHello(){
console.log('Hello World')
return 5;
}
console.log("App started");
Run Code Online (Sandbox Code Playgroud)
我的期望是它应该打印:
App started
Hello World
five: 5
Run Code Online (Sandbox Code Playgroud)
由于要执行的匿名函数被标记为异步。
但是,即使经过多次试验,它仍然可以打印:
Hello World
App started
five: 5
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下为什么会这样吗?
首先,您致电printHello()。
然后,您调用console.log('Hello World')哪个日志。
然后return 5;解决了诺言。
然后,您const five = await ...等待上面返回的承诺。这是一个微任务,因此排队等待,异步功能进入睡眠状态。
IIFE完成运行,因此外部功能继续使用console.log("App started");日志应用程序启动。
然后外部函数完成,因此微任务被拉出队列,异步函数被唤醒。
来自promise的已解析值将被分配并console.log(`five: ${five}`);记录下来。
有关更多信息,请参见MDN的时序。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |