有什么方法可以同步等待或检查网络工作者中的新消息吗?在Web-Worker中同步等待消息
我的代码(从emscripten编译LLVM)的大型复杂的身体,我不能重构周围回调。
我需要确保代码之后一定行不执行,直到我接受和处理来自UI线程的消息。如果我使用while循环进行阻塞,事件循环从不运行,因此我无法接收消息。
有什么方法可以同步等待或检查网络工作者中的新消息吗?在Web-Worker中同步等待消息
我的代码(从emscripten编译LLVM)的大型复杂的身体,我不能重构周围回调。
我需要确保代码之后一定行不执行,直到我接受和处理来自UI线程的消息。如果我使用while循环进行阻塞,事件循环从不运行,因此我无法接收消息。
不,不幸的是。有一些关于添加阻止来自父页面的消息的方法的讨论,但它并没有发生。我会看看我是否可以挖掘相关的邮件列表线程。
可以打破序列如下而不重构?
wrk.onmessage = function(e) {
if (e.data.step === 'initial input') {
doInitialWork(e.data.inputs)
} else if (e.data.step === 'ui input') {
doTheRest(e.data.uiData)
}
}
在onMessage事件将被阻塞,直到初始步骤执行堆栈是完整的,当并且如果信息是可用的临界UI位只会启动。
粗劈要做到这一点可以是使用一个同步的API,如文件系统API,并且使用临时文件作为同步机构。
在您的例子中,emscripten代码可以发出上的文件同步读取,而UI线程写入相同的文件,有效地疏通工人。
会有你的问题的解决方案,如果是的ECMAScript丰富的方案,其'调用与 - continuation'的语言。这将允许你捕捉当前的延续,并在你的onmessage'处理程序中再次调用它。 – Marc