在Web-Worker中同步等待消息

时间:2012-05-14 20:00:19

标签: javascript web-worker

是否有某种方法可以在Web工作者中同步等待或检查新邮件?

我有一个庞大复杂的代码体(从emscripten编译的LLVM),我无法围绕回调进行重构。

我需要确保某行之后的代码不会执行,直到我收到并处理来自UI线程的消息。如果我使用while循环阻塞,则事件循环永远不会运行,因此我无法接收消息。

3 个答案:

答案 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线程会写入同一文件,从而有效地解除阻塞工作。