一个小例子瞧破js微任务
2020-04-10 本文已影响0人
黑天月
setTimeout(()=>{
console.log('timeout');
});
Promise.resolve().then(
()=>{
console.log(1);
}
).then(
()=>{
console.log(2);
}
).then(
()=>{
console.log(3);
}
);
Promise.resolve().then(
()=>{
console.log('a');
}
).then(
()=>{
console.log('b');
}
).then(
()=>{
console.log('c');
}
);
这个例子的输出为“1”,“a”,“2”,“b”,“3”,“c”,“timeout”。
因为任务的执行顺序是宏任务,微任务交替执行的,所以作为下一次宏任务的“timeout”最后执行。
微任务与宏任务的运行机制不同,运行微任务时碰到的微任务会直接加到本次微任务队列的尾部,直到该队列没有可执行的微任务。
微任务的队列大致变化:
1, a
a, 2
2, b
b, 3
3, c
c
所以用严格执行顺序的Promise要写在一条链上