异步功能在Node.js中表现不正常

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)

有人可以解释一下为什么会这样吗?

Que*_*tin 5

首先,您致电printHello()

然后,您调用console.log('Hello World')哪个日志。

然后return 5;解决了诺言。

然后,您const five = await ...等待上面返回的承诺。这是一个微任务,因此排队等待,异步功能进入睡眠状态。

IIFE完成运行,因此外部功能继续使用console.log("App started");日志应用程序启动。

然后外部函数完成,因此微任务被拉出队列,异步函数被唤醒。

来自promise的已解析值将被分配并console.log(`five: ${five}`);记录下来。

有关更多信息,请参见MDN的时序