有什麼方法可以同步等待或檢查網絡工作者中的新消息嗎?在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