首先在es3之前,我们js一直单通道,单线程,我们是没有异步操作,在js执行的顺序中,我们就称之为宏任务
在es3之后,加入了promise 出现了微任务
setTimeout(() => {
console.log(1);
process.nextTick(() => console.log(5))
}, 0);
new Promise((resovle, reject) => {
console.log(2);
resovle();
}).then(() => console.log(3))
console.log(4);
在上面的代码块,我们最后的打印结果是 2,4,3,1,5
然后先执行同步,微任务,执行宏任务,其次要看js的执行顺序
promise就是微任务
宏任务、微任务的执行顺序
先执行同步代码,
遇到异步宏任务则将异步宏任务放入宏任务队列中,
遇到异步微任务则将异步微任务放入微任务队列中,
当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,
微任务执行完毕后再将异步宏任务从队列中调入主线程执行,
一直循环直至所有任务执行完毕。