setTimeout與Promise的區別


1,4,3,2

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

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

所以Promise會先於新task執行

 

根據html標准  一個task執行完后 ui會重渲染 

 

vue源碼:    nextTick異步更新dom操作先判斷是否支持Promise  再判斷是否支持MutationObserve 最后是setTimeout

 

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

microTask Queue(微任務隊列):

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

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

 

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM