JavaScript宏任务微任务问题setTimeout和Promise

let count = 10000;
setTimeout(function(){
    console.log('1')
}, 0);
new Promise(function(resolve){
    console.log('2');
    for(var i=0;i<count;i++){
        if(i === 10) {console.log(10)}
i == 9999 && resolve();
    }
}).then(function(){
    console.log('3')
});
console.log('5');

为什么是先输出3然后才输出1

阅读 3.8k
4 个回答

因为宏任务执行前必须先清空微任务列表,而3是微任务,1是宏任务。另外,微任务的套娃会不断阻碍宏任务的执行,众所周知,定时器的秒数是一个模糊的时间,是指x秒后浏览器空闲时执行,而0秒就更是一个模糊的概念,因为定时器有个最小时间间隔,有的浏览器是2s,有的是4s

就像打工。
promise.then安排的任务就是不管你今天下班多晚都得干完再下班;而setTimeout安排的任务就是最快也得明天做。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题