巨集任務(macrotask)和微任務(microtask)-非同步任務的分類
阿新 • • 發佈:2020-08-11
/*
*巨集任務
*分類:setTimeoutsetIntervalrequrestAnimationFrame
*1.巨集任務所處的佇列就是巨集任務佇列
*2.第一個巨集任務佇列中只有一個任務:執行主執行緒的js程式碼
*3.巨集任務佇列可以有多個
*4.當巨集任務佇列的中的任務全部執行完以後會檢視是否有微任務佇列如果有先執行微任務佇列中的所有任務,如果沒有就檢視是否有巨集任務佇列
*
*微任務
*分類:newPromise().then(回撥)process.nextTick
*1.微任務所處的佇列就是微任務佇列
*2.只有一個微任務佇列
*3.在上一個巨集任務佇列執行完畢後如果有微任務佇列就會執行微任務佇列中的所有任務
**/
console.log('----------------- start -----------------'); setTimeout(() => { console.log('setTimeout'); }, 0) new Promise((resolve, reject) =>{ for (var i = 0; i < 5; i++) { console.log(i); } resolve(); // 修改promise例項物件的狀態為成功的狀態 }).then(() => { console.log('promise例項成功回撥執行'); }) console.log('----------------- end -----------------');
結果:
----------------- start -----------------
0
1
2
3
4
----------------- end -----------------
promise例項成功回撥執行
setTimeout
非同步執行順序是先執行微任務,再執行巨集任務(巨集任務是非同步(巨集任務裡面也是先微任務再巨集任務))
順序是:先同步加一條非同步的微任務
,再非同步,加上 巨集任務和微任務
同步從上之下執行