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/