MacroTask v.s. MicroTask
妈(Ma)咪 (Mi)
MacroTask(宏任务)
MicroTask(微任务)
通过Event Loop实现
- macrotasks 有 setTimeout setInterval setImmediate I/O UI渲染
- microtasks 有 Promise process.nextTick Object.observe MutationObserver
- 先执行 Ma 再执行 Mi。宏任务和微任务轮流执行,Mi任务每次都清空
- new Promise(fn).then(success) 期中 fn 是立即执行的,success 会被放入 Mi 任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| console.log('script start');
setTimeout(function() { console.log('setTimeout'); }, 0);
let promise = new Promise((resolve, reject)=>{ console.log(1) resolve() }) promise.then(function() { console.log('promise1'); }).then(function() { console.log('promise2'); });
console.log('script end')
log 的顺序。 script start 1 script end promise1 promise2 Promise {<resolved>: undefined} setTimeout
|
Comments