Vue - EventLoop 的基本概念
图片来自 黑马程序员 免费视频

我们使用这样的代码来验证:
这段代码输出的结果是: A D C B
console.log('A')
thenFs.readFile('./files/1.txt','utf8').then(dataStr => {
console.log('B')
})
setTimeout(()=>{
console.log('C')
}, 0)
console.log('D')
JavaScript 把异步任务又做了进一步的划分,分为 宏任务、微任务 两类:
宏任务(macrotask)包括:
异步 ajax 请求、setTimeout 、setInterval 、文件操作、其它宏任务
微任务(microtask)包括:
1、Promise.then 、catch 、finally
2、process.nextTick
3、其它微任务

每一个宏任务执行完之后,都会检查是否存在待执行的微任务,如果有,则执行完所有的微任务后,再继续执行下一个宏任务。
在下面的这段代码里,输出的结果是:2、4、3、1
setTimeout(function(){ console.log('1') }) new Promise(function(resolve){ console.log('2') resolve() }).then(function(){ console.log('3') }) console.log('4')

亲自试一试:
console.log('1')
setTimeout(function(){
console.log('2')
new Promise(function(resolve){
console.log('3')
resolve()
}).then(function(){
console.log('4')
})
})
new Promise(function(resolve){
console.log('5')
resolve()
}).then(function(){
console.log('6')
})
setTimeout(function(){
console.log('7')
new Promise(function(resolve){
console.log('8')
resolve()
}).then(function(){
console.log('9')
})
})
浙公网安备 33010602011771号