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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
因为宏任务执行前必须先清空微任务列表,而3是微任务,1是宏任务。另外,微任务的套娃会不断阻碍宏任务的执行,众所周知,定时器的秒数是一个模糊的时间,是指x秒后浏览器空闲时执行,而0秒就更是一个模糊的概念,因为定时器有个最小时间间隔,有的浏览器是2s,有的是4s
https://blog.csdn.net/qq_3037...
这个讲得很清楚
https://juejin.cn/post/695353...
建议重新梳理一下 任务队列的知识就知道了。
就像打工。
promise.then安排的任务就是不管你今天下班多晚都得干完再下班;而setTimeout安排的任务就是最快也得明天做。