【问题标题】:Where can I find the complete list of items added to MicroTask Queue?在哪里可以找到添加到 MicroTask Queue 的项目的完整列表?
【发布时间】:2020-01-21 17:03:52
【问题描述】:

我在看完Difference between microtask and macrotask within an event loop context的帖子后跟进

发布的例子是

macrotasks: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
microtasks: process.nextTick, Promises, Object.observe, MutationObserver

我想知道在官方文档中哪里可以找到添加到microtask队列的任务列表

谢谢

【问题讨论】:

    标签: javascript ecmascript-6 ecma


    【解决方案1】:

    https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint

    当用户代理要执行微任务检查点时:

    1. 如果事件循环执行微任务检查点为真,则 返回。

    2. 将事件循环的执行微任务检查点设置为 true。

    3. 虽然事件循环的微任务队列不为空:

      3.1 让 oldMicrotask 成为从事件循环中出队的结果 微任务队列。

      3.2 将事件循环当前运行的任务设置为oldestMicrotask。

      3.3 运行最旧的微任务。

      这可能涉及调用脚本回调,最终调用 运行脚本步骤后的清理,这称为执行 再次使用微任务检查点算法,这就是我们使用 执行微任务检查点标志以避免重入。

      3.4 将事件循环当前正在运行的任务设置回null。

    4. 对于每个负责事件循环的环境设置对象 此事件循环,通知该环境中被拒绝的承诺 设置对象。

    5. 清理索引数据库事务。

    6. 将事件循环执行微任务检查点设置为 false。

    当并行运行的算法要等待稳定状态时, 用户代理必须将运行以下步骤的微任务排队,并且 然后必须停止执行(算法的执行恢复时, microtask 运行,如以下步骤所述):

    运行算法的同步部分。

    在适当的情况下恢复并行执行算法,如 在算法的步骤中描述。

    同步部分中的步骤用⌛标记。

    【讨论】:

    • 这里没有列出所有任务都作为微任务添加的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多