上码:
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