宏任务和微任务都是异步耗时任务。
宏任务有setImmediate,setTimeout,setInterval, I/O,异步ajax,文件操作等
宏任务中的优先级:
setImmediate > setTimeout > 间歇调用 > I/O > 异步ajax
微任务有promise(then,catch,finally),process.nextTick等
微任务中的优先级:
Process.nextTick > Promise(then,catch,finally)
js代码可以分为同步代码和异步代码,先执行同步代码,遇到异步代码不会执行,将异步代码放到异步任务队列中,异步任务又分为宏任务和微任务.
主线程不断从异步任务队列中读取事件,这个过程是循环不断的,这种运行机制就叫做Event Loop(事件循环)
一次事件循环机制可以将所有的微任务执行完毕,一次事件循环只能执行一个宏任务。
console.log('1'); //同步代码
setTimeout(function () {
console.log('2'); //宏任务里的同步代码
process.nextTick(function () {
console.log('3'); //宏任务里的微任务
})
new Promise(function (resolve) {
console.log('4'); //宏任务里同步代码
resolve();
}).then(function () {
console.log('5') //宏任务里的微任务
})
});
process.nextTick(function () {
console.log('6'); //微任务
});
new Promise(function (resolve) {
console.log('7'); //同步代码
resolve();
}).then(function () {
console.log('8') //微任务
})
setTimeout(function () {
console.log('9'); //宏任务里的同步代码
process.nextTick(function () {
console.log('10'); //宏任务里的微任务
});
new Promise(function (resolve) {
console.log('11'); //宏任务里的同步代码
resolve();
}).then(function () {
console.log('12') //宏任务里的微任务
})
});
// 1 7 6 8 2 4 3 5 9 11 10 12