在瞭解async以後,發現一個本身不是很熟悉的點兒,在這兒記錄一下promise
js 中存在宏任務和微任務,js 的執行順序是 一個宏任務執行結束以後纔會去執行下一個宏任務,微任務是在本宏任務的主要的任務結束以後,再去執行微任務,當全部的微任務結束以後,這個宏任務也就算執行結束了,值的注意的是,script 就是一個大的宏任務
先分類:
宏任務 srcipt > setImmediate > messageChannel > setTimeout/setInterval
微任務 promise相關的 reslove 裏邊的
舉例說明
<script>async
console.log("1")
setTimeout(function() {console.log('2')}, 0)
new Promise(function (resolve) {
console.log('3')
resolve()
}).then( function() {
console.log('4') ip
})ci
console.log('5')io
</script>console
結果會是 1 3 5 4 2 function
由於script 和 setTimeout 都是宏任務,因此setTimeout 會在script 結束以後執行,因此 2 的最後的
then 是微任務,要等宏任務的主線任務結束以後執行,因此會 是先3 ,而後跳出 執行 5, 5完成以後,宏任務的主線完成
開始執行微任務 then , 打印 4 ,以後,宏任務結束,開始執行另外一個宏任務,也就是 setTimeout , 打印 2im