在JavaScript中,setTimeout
和Promise.resolve
的执行顺序涉及到事件循环(Event Loop)的机制。为了更好地理解这个问题,我们需要先了解一些基础概念。
setTimeout
、setInterval
、I/O
、UI渲染等。Promise.then
、process.nextTick
(Node.js)、MutationObserver
等。根据事件循环的机制,微任务会在当前宏任务执行完毕后立即执行,而宏任务则会在下一个事件循环周期开始时执行。
console.log('Script start');
setTimeout(() => {
console.log('setTimeout');
}, 0);
Promise.resolve().then(() => {
console.log('Promise.resolve');
});
console.log('Script end');
Script start
Script end
Promise.resolve
setTimeout
Promise.resolve
会立即执行,并将其回调函数放入微任务队列。Promise.resolve
的回调函数会在Script end
之后立即执行。setTimeout
会将回调函数放入宏任务队列,但不会立即执行。setTimeout
的回调函数会在所有微任务之后执行。在JavaScript中,Promise.resolve
的回调函数会在当前宏任务完成后立即执行,而setTimeout
的回调函数会在下一个事件循环周期开始时执行。因此,Promise.resolve
会先于setTimeout
执行。
领取专属 10元无门槛券
手把手带您无忧上云