2012-05-14 48 views
15

有什么方法可以同步等待或检查网络工作者中的新消息吗?在Web-Worker中同步等待消息

我的代码(从emscripten编译LLVM)的大型复杂的身体,我不能重构周围回调。

我需要确保代码之后一定行不执行,直到我接受和处理来自UI线程的消息。如果我使用while循环进行阻塞,事件循环从不运行,因此我无法接收消息。

+0

会有你的问题的解决方案,如果是的ECMAScript丰富的方案,其'调用与 - continuation'的语言。这将允许你捕捉当前的延续,并在你的onmessage'处理程序中再次调用它。 – Marc

回答

0

不,不幸的是。有一些关于添加阻止来自父页面的消息的方法的讨论,但它并没有发生。我会看看我是否可以挖掘相关的邮件列表线程。

1

可以打破序列如下而不重构?

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位只会启动。

0

粗劈要做到这一点可以是使用一个同步的API,如文件系统API,并且使用临时文件作为同步机构。

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