setTimeout(()=>{
console.log('set1')
})
new Promise((resolve,reject)=>{
console.log('p1')
resolve();
}).then(()=>{
console.log('then1')
})
console.log('1')
最后的執行結果順序是:p1,set1,then1,set1
整個的一個執行順序涉及到兩點:
- js的執行順序
- 微任務與宏任務
對於js的執行順序而言,按照代碼的順序去找,
- 沒有異步就 順序執行
- 有異步放入異步隊列之中
- new Promise的第一部分是按照同步執行的
以上三點可知:先打印p1之后是1;在之后由於set1和then1是放入異步隊列之中的,那么當順序執行完成之后再去執行這些。但是,任務又分為微熱恩恩無和宏任務: - 每次支持性完成后要先檢查當前是否微任務隊列中還有微任務還沒有執行完成,如果有的話就先執行完微任務再去執行下一個宏任務