【发布时间】:2021-06-15 09:31:18
【问题描述】:
为什么事件循环优先于卡通的 setTimeouts 而不是 then 的 setTimeout?我所知道的是,事件循环应该优先考虑诸如promises之类的微任务,然后执行消息队列(卡通的setTimeouts)。
const tom = () => console.log('Tom');
const jerry = () => console.log('Jerry');
const doggy = () => console.log('Doggy');
const cartoon = () => {
console.log('Cartoon');
setTimeout(tom, 0);
setTimeout(doggy, 0);
new Promise((resolve, reject) => {
resolve('I am a Promise, right after tom and doggy! Really?');
}).then(resolve => {
console.log(resolve);
setTimeout(() => {
console.log('inner timeout')
}, 0)
});
new Promise((resolve, reject) =>
resolve('I am a Promise after Promise!')
).then(resolve => console.log(resolve));
jerry();
}
cartoon();
输出:
"Cartoon"
"Jerry"
"I am a Promise, right after tom and doggy! Really?"
"I am a Promise after Promise!"
"Tom"
"Doggy"
"inner timeout"
【问题讨论】:
-
.then()s 只是添加到微任务队列中。然后你的微任务是添加一个宏任务。但是已经添加了两个宏任务(tom和jerry)。这是一个队列,因此您打印'inner timeout'的任务将在它们的后面。
标签: javascript