1.Promise有個微任務隊列(then),輪詢到執行的時候,就會從隊列中調出任務,放入主線程中去執行
2.任務中的微隊列可以有多個
3.等級排序:主線程>微任務>宏任務(其最后執行setTimeout)
4.主線程中的任務執行完成后,再去掃描微任務隊列中有沒有任務(由resolve,reject把任務放進微任務隊列中去),有則執行,沒有再去執行宏任務
格式:
new promise(主任務).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將不會再起作用