我知道setTimeout()函数内的回调函数会等待定时器到期并被推入回调队列。另一方面,一旦承诺实现或拒绝,其回调将被推入微任务队列中,该队列具有更高的优先级。
我的问题是哪个更快:在承诺内部的setTimeout()还是简单的setTimeout()。如果前者不再放入微任务队列中,为什么setTimeout()单独运行而不是反过来?
现在假设我忘记了1秒的延迟,现在Promise将始终首先出现,因为在微任务队列中安排的回调具有更高的优先级。
我的问题是哪个更快:在承诺内部的setTimeout()还是简单的setTimeout()。如果前者不再放入微任务队列中,为什么setTimeout()单独运行而不是反过来?
setTimeout(() => {
console.log('timeout');
}, 1000);
let promise = new Promise(function(resolve, reject) {
// This is run automatically, let's run resolve after 1 second
setTimeout(() => resolve('promise!'), 1000);
});
promise.then(
(result) => console.log(result),
(err) => console.log(error)
);
// output: timeout -> promise || and not || promise -> timeout
setTimeout(() => {
console.log('timeout');
}, 0);
let promise = new Promise(function(resolve, reject) {
// This is run automatically, let's run resolve after 1 second
// setTimeout(() => resolve('promise!'), 1000);
resolve('');
});
promise.then(() => {
console.log('promise');
});
setTimeout()
调用非常快速地连续发生。运行时会将它们排队到计时器队列中。首先请求的那个将会首先触发,而第二个请求的将会在之后触发。第二个setTimeout()
调用在Promise回调函数中并没有任何区别。 - Pointy