Ada*_*son 1 javascript browser timer event-loop task-queue
我的理解是在每个宏任务之后处理完整的微任务任务队列。
如果是这种情况,为什么在以下代码片段中setTimeout的Promise微任务之后执行回调JavaScript?
console.log('start');
setTimeout(() => {
console.log("setTimeout");
});
Promise.resolve().then(function() {
console.log('promise');
});
console.log('end');
Run Code Online (Sandbox Code Playgroud)
这将输出以下内容:
> "start"
> "end"
> "promise"
> "setTimeout"
Run Code Online (Sandbox Code Playgroud)
是因为4ms现代浏览器强加了 ~延迟吗?
来自MDN:
在现代浏览器中,当由于回调嵌套(其中嵌套级别至少为一定深度)或在一定数量的连续间隔后触发连续调用时,
setTimeout()/setInterval()调用被限制为至少每 4 毫秒一次。
尽管这表明它仅适用于连续回调嵌套。
我的理解是在每个宏任务之后处理完整的微任务任务队列。
是的。你运行的代码,从console.log('start')到console.log('end'),就是这样一个宏任务。在它运行完成后,带有承诺回调的微任务队列被处理,只有在此之后下一个宏任务(超时)才能运行。
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |