此问题已在此处有答案:
output order involve promise, micro task queue in js [duplicate](1个答案)
21小时前关闭
为什么google chrome在控制台显示2,然后显示1?
Promise.resolve().then(function() {
Promise.resolve().then(function() {
console.log('1');
});
});
Promise.resolve().then(function() {
console.log('2');
});
1条答案
按热度按时间vql8enpb1#
这是因为promise和微任务在java script中的处理方式当promise被解析时附加到它的回调函数作为微任务排队这是一个工作单元计划在当前任务之后执行即当前函数在代码中完成你有两个promise被解析并有回调函数附加到它们第一个promise被解析它的回调函数是作为微任务排队,则第二个promise解析,并且其回调函数也作为微任务排队,因为两个微任务同时排队。它们执行的顺序取决于浏览器对google chrome中事件循环的实现。微任务队列被实现为fifo先进先出队列,这意味着排队的第一个微任务即来自第一个微任务的微任务。promise将在第二个micrtask之前执行,因此当您在google chrome中运行此代码时,您将看到输出2首先打印,然后是1当第二个promise被解析时,输出2立即打印,而输出1在第一个promise的回调函数作为微任务执行后打印请注意,javascript规范不保证执行微任务的顺序。并且可能在不同的浏览器中有所不同,因此避免依赖于微任务的执行顺序并编写独立于执行顺序的代码总是一个好的做法。