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