[在工人中,我需要定期让步,以允许事件循环安排传入消息的处理。—目前,我以新的承诺和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();
是否有一种更紧凑的方法来自愿进行处理?-好像我在这里遗漏了一些东西:这看起来像是一项超常规的任务,但是没有“自然”的方法?
您可以使用generator functions,它至少在语义上清楚函数的行为方式,但可能不比async函数“紧凑”。并将控件留给消息队列,您可以等待另一个消息队列(即MessageChannel中的一个),该队列将为faster than setTimeout
。