一个小例子瞧破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要写在一条链上

上一篇下一篇

猜你喜欢

热点阅读