【发布时间】:2019-01-31 20:03:46
【问题描述】:
我的理解是完整的微任务任务队列在每个宏任务之后处理。
如果是这样,为什么setTimeout回调在JavaScript的以下sn-p中的Promise微任务之后执行?
console.log('start');
setTimeout(() => {
console.log("setTimeout");
});
Promise.resolve().then(function() {
console.log('promise');
});
console.log('end');
这会输出以下内容:
> "start"
> "end"
> "promise"
> "setTimeout"
是因为现代浏览器施加了 ~4ms 延迟吗?
来自MDN:
在现代浏览器中,
setTimeout()/setInterval()调用被限制为 当由于以下原因触发连续呼叫时,至少每 4ms 一次 回调嵌套(其中嵌套级别至少是某个 深度),或在一定数量的连续间隔之后。
虽然这表明它只适用于连续的回调嵌套。
【问题讨论】:
标签: javascript browser timer task-queue event-loop