生活随笔
收集整理的這篇文章主要介紹了
事件循环机制(even loop)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結
- 同步代碼優先級高于異步代碼優先級;
- new Promise(fn)中的fn是同步執行;
- 微任務優先級高于宏任務優先級;
- 微任務:process.nextTick() > Promise.then()
- 宏任務:setTimeout、setInterval > setImmediate
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 9 11 3 10 5 12 setImmediate(() =>
{console.log('第一行setImmediate'
);
}, 0
);
var time = setInterval(() =>
{console.log('第二行 setInterval'
);clearInterval(time);
}, 0
);
setTimeout(() =>
{console.log('第三行 setTimeout'
);
}, 0
);
var time1 = setInterval(() =>
{console.log('第四行 setInterval'
);clearInterval(time1);
}, 0
);
setImmediate(() =>
{console.log('第五行setImmediate'
);
}, 0
);
process.nextTick(() =>
{console.log('第六行 nextTick'
);
});
new Promise((resolve, reject) =>
{reject('reject'
);console.log('第七行Promise'
);resolve('resolve'
);
}).then(() =>
{console.log('第八行 Promise then resolve'
);
}.catch() =>
{console.log('第八行 Promise then reject'
);
});// 輸出結果:
// 第七行Promise【先執行同步】
// 第六行 nextTick【微任務】
// 第八行 Promise then resolve【微任務】
// 第二行 setInterval【宏任務】
// 第三行 setTimeout【宏任務】
// 第四行 setInterval【宏任務】
// 第一行setImmediate【宏任務】
// 第五行setImmediate【宏任務】 請注意,node環境下的事件監聽依賴libuv與前端環境不完全相同,輸出順序可能會有誤差!!
請注意:chrome中間層 & node中間層libuv
轉載于:https://www.cnblogs.com/hujingxuan1437/p/11120708.html
總結
以上是生活随笔為你收集整理的事件循环机制(even loop)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。