当我发出 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();
}
类似的事情也发生在我身上。我无法解释为什么,即使我做了一些测试。不管怎样,我唯一的贡献是,同样有问题的脚本只在 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
从 Firefox 121 开始,对我有用的是
self.onmessage = 函数(事件){ if(event.data && !event.data.devtoolsEnabled ) {
至少在我的机器上,这似乎是 Vue.js devtools 扩展(当前为 v6.5.1)的副作用