异步函数内的代码在其后面的代码之前执行

AL-*_*ami 3 javascript asynchronous async-await

我正在javascript中探索async/await的概念.我知道async函数返回一个应该在未来时间内解决的promise并且它不会阻止代码的自然执行.这里我有一个我写的代码测试javascript的异步执行.

console.log("1")
async function asyncFunc(){
  for(i=0;i<10000000;i++){
  }
  console.log("3")
}
asyncFunc().then(()=>{console.log('4')});
console.log("2");
Run Code Online (Sandbox Code Playgroud)

我除了代码将以下列方式执行:

第一个console.log()打印1

其次,调用异步函数.由于异步代码是非阻塞的,因此最后一个console.log()将执行,从而在控制台中打印2.

之后,执行async函数内的console.log()并在控制台中打印3.

最后,承诺将被解决,并且then将执行console.log()内部并打印4.

所以预期产量:1,2,3,4

但实际上我的输出为1,3,2,4.

为什么它表现得像这样,而不是我期望的方式

Que*_*tin 5

该函数在完成运行之前不会返回一个promise(除非你await在其中有另一个promise).

循环运行(阻塞所有内容),然后console.log("3")进行评估,然后返回一个promise.

调用函数继续运行(记录2).

最后,释放事件循环并调用传递给的函数then.

将函数标记为异步不会将其中的同步代码转换为异步代码.

  • @ AL-zami - 它提供了更好的语法,用于处理异步代码(因为您可以使用处理返回而不是回调的语法). (2认同)
  • 查看MDN页面的异步.它有例子. (2认同)