javascript - 如何在 JavaScript 任务队列中排队(宏)任务?

标签 javascript task event-loop

queue a task最直接直接的方式是什么?在浏览器事件循环中,使用 JavaScript?

那些事情不要工作:

  • window.setImmediate(func) : 非标准。
  • window.setTimeout(func, 0)/window.setInterval(func, 0) :Browsers throttle timers to ≥ 4ms.
  • new Promise(r => r()).then(func) :这是一个微任务,而不是一个任务。
  • 最佳答案

    MessagePort.postMessage 就是这样。

    onmessage = e => handleMessage;
    postMessage("","*");
    

    您甚至可以使用 MessageChannel如果你想要一个不那么侵入性的手段:
    const channel = new MessageChannel();
    channel.port1.onmessage = handleMessage;
    channel.port2.postMessage('');
    

    这是目前唯一一个同步队列任务的 API,所有其他的都意味着至少有一些并行执行。

    也许有一天我们会有一个 scheduler.postTask 方法,它甚至可以让我们为我们的任务指定一些优先级,但这仅适用于 future ......

    关于javascript - 如何在 JavaScript 任务队列中排队(宏)任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61574088/

    相关文章:

    javascript - 停止输入字段内的按键弹出窗口

    javascript - 过滤列表中的数据(删除按钮)不起作用?

    javascript - Uncaught ReferenceError : parentsCheck is not defined

    c# - ThrowIfCancellationRequested 带或不带异步/等待?

    javascript - 了解事件循环

    javascript - 在 Node.js 中等待异步函数返回

    javascript - 根据 float 元素的高度定位 CSS 元素

    unix - Cron 每分每秒运行一次

    c# - 寻找导致未观察到 "A Task' 异常的原因...”

    node.js - 保持 Node.js 异步的问题