对事件循环如何从任务队列中获取任务感到困惑

问题描述 投票:0回答:1

最近我看到了 Jake Archibald 分享的事件循环会话。正如他在视频的时间27:55中提到的那样,事件循环似乎每轮从队列中获取一项任务

enter image description here

但是,我们在mozilla上阅读了文档深入:微任务和JavaScript运行环境,它是这样写的:

从任务队列执行任务时,运行时会执行事件循环的新迭代开始时队列中的每个任务。

当回合开始时,队列中的所有项目似乎都会被获取

那么哪一个是正确的呢?每轮 1 个项目还是每轮所有现有项目?

javascript event-loop
1个回答
0
投票

它是“每轮一个项目”,使用规格措辞

  1. 如果 事件循环 有一个 任务 队列 至少有一个 可运行 任务, 然后:

[注意] 请记住 微任务队列 不是一个 任务 队列, 所以这一步不会被选择。然而,一个任务 队列 microtask 任务 来源 可以在此步骤中选择关联。在这种情况下, 任务 下一步选择的最初是 微任务, 但它作为 旋转事件的一部分而被移动 循环

因此,在一个事件循环的“回合”中运行的唯一任务是“任务队列中的第一个可运行任务”。

MDN 文章应该更新,因为措辞确实令人困惑。

© www.soinside.com 2019 - 2024. All rights reserved.