是否有某种方法可以在Web工作者中同步等待或检查新邮件?
我有一个庞大复杂的代码体(从emscripten编译的LLVM),我无法围绕回调进行重构。
我需要确保某行之后的代码不会执行,直到我收到并处理来自UI线程的消息。如果我使用while循环阻塞,则事件循环永远不会运行,因此我无法接收消息。
答案 0 :(得分:1)
不,不幸的是。有一些关于添加阻止来自父页面的消息的方法的讨论,但它无处可去。我会看看我是否可以挖掘相关的邮件列表主题。
答案 1 :(得分: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位仅在信息可用时才会启动。
答案 2 :(得分:0)
执行此操作的粗暴方法可能是使用同步API(例如FileSystem API),并使用临时文件作为同步机制。
在您的示例中,emscripten代码可以对文件发出同步读取,而UI线程会写入同一文件,从而有效地解除阻塞工作。