记了老是忘记那就写下来吧宏任务微任务
生活随笔
收集整理的這篇文章主要介紹了
记了老是忘记那就写下来吧宏任务微任务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
宏任務:script 定時器 微任務:promiss process.nexttick
new Promise(function(resolve){console.log(3);//此為同步程序resolve();//同步 是否異步 由內部函數決定console.log(4); }).then(function(){ //。then 異步console.log(5); });async function async1() {console.log("async1 start");//同步await async2();//同步 是否異步 由內部函數決定console.log("async1 end");//異步開始}process.nextTick 永遠大于 promise.then
知乎練習題
setTimeout(function () {console.log(4) }, 0); new Promise(function (resolve) {console.log(1);for (var i = 0; i < 10000; i++) {i == 9999 && resolve()}console.log(2) }).then(function () {console.log(5) }); console.log(3);// 1 3 2 5 4 錯誤 // 12354 ? // 由于整個 script 也屬于一個 macrotask, 由于會先執行 macrotask 中的第一個任務, 再加上promise 構造函數因為是同步的,所以會先打印出 1和2然后繼續同步執行末尾的 console.log(3) 打印出3 此時 setTimeout 被推進到 macrotask 隊列中,promise.then 回調被推進到 microtask 隊列中由于在第一步中已經執行完了第一個 macrotask , 所以接下來會順序執行所有的 microtask, 也就是 promise.then 的回調函數 ,從而打印出5microtask 隊列中的任務已經執行完畢,繼續執行剩下的 macrotask 隊列中 的任務,也就是 setTimeout, 所以打印出 4
“剩下的疑問: process.nextTick也會放入microtask quque,為什么優先級比promise.then高呢? 到底是不是setTimeout有一個依賴實現的最小延遲?4ms?”
process.nextTick 永遠大于 promise.then,原因其實很簡單。。。在Node中,_tickCallback在每一次執行完TaskQueue中的一個任務后被調用,而這個_tickCallback中實質上干了兩件事: 1. nextTickQueue中所有任務執行掉(長度最大1e4,Node版本v6.9.1) 2. 第一步執行完后執行_runMicrotasks函數,執行microtask中的部分(promise.then注冊的回調) 所以很明顯process.nextTick > promise.then
轉載于:https://www.cnblogs.com/smzd/p/8482278.html
總結
以上是生活随笔為你收集整理的记了老是忘记那就写下来吧宏任务微任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go爬虫和python爬虫哪个好_pyt
- 下一篇: 单行溢出 和多行溢出