1. 程式人生 > 實用技巧 >js中Promise的微任務佇列和巨集任務的區別以及單一狀態

js中Promise的微任務佇列和巨集任務的區別以及單一狀態

1.Promise有個微任務佇列(then),輪詢到執行的時候,就會從佇列中調出任務,放入主執行緒中去執行 2.任務中的微佇列可以有多個 3.等級排序:主執行緒>微任務>巨集任務(其最後執行setTimeout) 4.主執行緒中的任務執行完成後,再去掃描微任務佇列中有沒有任務(由resolve,reject把任務放進微任務佇列中去),有則執行,沒有再去執行巨集任務 格式: newpromise(主任務).then(result,err).then(result,err).then(...) //其實每一個Promise.then也是一個Promise... 見程式碼:
 1
setTimeout(() => { 2 console.log('我是巨集任務'); 3 }, 0); //先來個巨集任務 4 5 new Promise((resolve, reject) => { 6 reject('第一次執行失敗'); 7 console.log('主執行緒1'); 8 }) 9 .then(result => { 10 console.log(result); 11 }, err => {
12 console.log(err); 13 }) 14 .then( //對上一次then執行結果的處理 15 result => { 16 console.log('後續處理成功啦') 17 }, 18 err => { 19 console.log('後續處理還是失敗'); 20 } 21 ) 22 console.log('主執行緒2');

//執行結果:

主執行緒1
主執行緒2
第一次執行失敗
後續處理成功啦
我是巨集任務

再之需要注意的便是Promise的主任務中的狀態是單一不可變的,即如果有多個狀態時,位置最靠前的起決定作用,後續的reject,resolve將不會再起作用