【问题标题】:How to “properly” yield in a Javascript worker for message processing?如何“正确地”让 Javascript 工作线程进行消息处理?
【发布时间】:2020-06-10 02:37:36
【问题描述】:

在 Worker 中,我需要定期让出以允许事件循环安排传入的消息处理。——目前我使用新的 promise 和 setTimeout() 来做到这一点。

addEventListener('message', () => console.log('reading incoming message'));
async function work() {
    while (true) {
        // do a piece of work
        await new Promise(resolve => setTimeout(resolve, 0));
        // break if ordered via message
    }
}
work();

有没有一种更紧凑的方式来自愿让步处理?——感觉好像我在这里遗漏了一些东西:这看起来像是一项超级常见的任务,但没有“自然”的方式来完成它?

【问题讨论】:

标签: javascript asynchronous async-await event-loop


【解决方案1】:

您可以使用generator functions,它至少在语义上更清楚函数的行为方式,但可能不会比您的 async 函数“更紧凑”。
要将控制权留给消息队列,您可以等待另一个消息队列(即 MessageChannel 中的一个),即faster than setTimeout

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多