setTimeout與Promise的區別

1,4,3,2html

Promise是一個micro task  主線程是一個task  micro task queue會在task後面執行vue

setTimeout返回的函數是一個新的task macro task queuehtml5

因此Promise會先於新task執行api

 

根據html標準  一個task執行完後 ui會重渲染 promise

 

vue源碼:    nextTick異步更新dom操做先判斷是否支持Promise  再判斷是否支持MutationObserve 最後是setTimeoutdom

 

macroTask Queue(宏任務隊列) : setTimeout  setInterval   setImmediate   requestAnimationFrame  NodeJS的I/O異步

microTask Queue(微任務隊列):函數

promise   (獨立回調)其成功/失敗回調函數相互獨立ui

複合回調: Object.observe, MutationObserver 和NodeJs中的 process.nextTick ,不一樣狀態回調在同一函數體線程

 

 requestAnimationFrame是html5的api  有兼容性問題 可是精度比較高

它的時間間隔是系統決定的  保證屏幕刷新一次  回調函數只執行一次 好比屏幕刷新的頻率是60hz 間隔1000ms/60hz執行一次回調

相關文章
相關標籤/搜索