2012-05-14 113 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線程寫入相同的文件,有效地疏通工人。