1.事件轮询
执行一个宏任务,执行并清空所有的微任务, 进入下一个事件循环(执行一个宏任务,执行并清空所有的微任务)
2.宏任务和微任务
异步队列中包括:微任务(micro-task) 和 宏任务(macro-task)
微任务包括: process.nextTick ,Promise ( process.nextTick 为 Node 独有)
宏任务包括: script , setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering
Tips:
微任务优先级高于宏任务的前提是:同步代码已经执行完成。因为 script 属于宏任务,程序开始后会首先执行同步脚本,也就是script 。
Promise 里边的代码属于同步代码,.then() 中执行的代码才属于异步代码。
setTimeout(function () {
console.log(" set1------5");
new Promise(function (resolve) {
resolve();
}).then(function () {
new Promise(function (resolve) {
resolve();
}).then(function () {
console.log("then4-------7");
});
console.log("then2------6 ");
});
});
new Promise(function (resolve) {
console.log("pr1----1");
resolve();
}).then(function () {
console.log("then1----3");
});
setTimeout(function () {
console.log("set2-----8");
});
console.log('2--------2');
new Promise(function (resolve) {
resolve();
}).then(function () {
console.log("then3----4");
});