async/await的执行顺序个人感悟

上码:

import thenFs from 'then-fs'
console.log('A')
async function test(){
    console.log('B')
    const txt1 = await thenFs.readFile('./1.txt','utf8')
    const txt2 = await thenFs.readFile('./2.txt','utf8')
    const txt3 = await thenFs.readFile('./3.txt','utf8')
    console.log(txt1,txt2,txt3)
    console.log('C')
}
test()
console.log('D')

分析:

该模块的执行顺序是
在这里插入图片描述

需要注意的是,async/await的一个重要的特点是,在asycn方法中,第一个await之前的代码会同步执行,之后的代码都异步执行。 我认为async/await语法糖其实就是在async方法中营造了一个“伪同步”的环境,例如本例中的读取三个文本的操作似乎就像是同步代码一样,从上往下按顺序执行,但是其本质依然是异步代码,并且有前面说的第一个await前的代码会同步执行,所以先输出A,接着输出B,接着碰到第一个await后的代码,因为他们本质是异步的,所以先放到宿主环境执行,接着继续执行同步代码输出D,等异步代码执行完后,宿主环境将他们的回调函数继续放在js执行栈运行,因为async/await“伪同步”的特点,他们在代码中的顺序是怎么样的,输出就按照什么顺序,而不会像一般的promise那样,哪个异步先执行完就谁优先放进回调队列。所以按顺序输出三个文本的内容后,再输出C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值