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執行一次回調