Web Worker onMessage 收到消息两次

问题描述 投票:0回答:2

当我发出 webworker.postMessage('any message') 时,它会被 onMessage 监听器处理两次。我尝试对消息运行 stopPropagation,但它仍然会再次运行。我通过 console.log 验证了主线程中对 postMessage 的调用仅被调用一次。我验证了被调用的网络工作者是唯一的。我可以修复它,使其 postMessage 只导致调用 one onMessage 事件吗?

显示对网络工作人员的调用的片段:

        this.webworker.postMessage('Message one');
    }

我的网络工作者:

/// <reference lib="webworker" />

onmessage = function(data) {
    console.log('@@ in web worker' + JSON.stringify(data.data));
    data.stopPropagation();
}
javascript angular web-worker
2个回答
0
投票

类似的事情也发生在我身上。我无法解释为什么,即使我做了一些测试。不管怎样,我唯一的贡献是,同样有问题的脚本只在 Firefox 中给了我双倍的 console.log 消息,而在 Edge 和 Chrome 中则没有。

无论如何,在我的简单测试工作人员中,我设置了一个计数器。这样我就可以确认只执行一次,并且问题只与console.log有关。

    self.curcounter=self.curcounter+ 1; //this has been executed once
    self.console.log('WORKER received a INT:' + e.data + ' self.curcounter: '+ self.curcounter); //this twice

0
投票

从 Firefox 121 开始,对我有用的是

self.onmessage = 函数(事件){ if(event.data && !event.data.devtoolsEnabled ) {

至少在我的机器上,这似乎是 Vue.js devtools 扩展(当前为 v6.5.1)的副作用

© www.soinside.com 2019 - 2024. All rights reserved.