在网络同步工人等待消息(Synchronously Wait for Message in Web-

2019-07-29 09:38发布

是否有某种方式来同步等待或在Web工人检查是否有新的消息?

我有一些代码(从emscripten LLVM编译),我可以不重构周围回调的大型复杂机构。

我需要确保代码之后一定行不执行,直到我接受和处理来自UI线程的消息。 如果我有一个while循环阻止,事件循环永远不会运行的,所以我不能接收消息。

Answer 1:

没有,很遗憾。 有添加一个方法来阻止从父页面的消息进行了一些讨论,但没有取得进展。 我去看看我能挖了相关的邮件列表线程。



Answer 2:

你能打破序列如下而不重构?

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位才会推出。



Answer 3:

粗黑客要做到这一点可能是使用同步API,如文件系统API,并使用临时文件作为一个同步机制。

在您的例子中,emscripten代码可以发出一个文件中读取同步,而UI线程写入相同的文件,有效地疏通工人。



文章来源: Synchronously Wait for Message in Web-Worker