You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同名变量绑定的多个Web Worker如何接收全部返回消息?

问题原因

  • 你猜测的变量覆盖问题确实存在:使用var声明的socketWorker存在变量提升,每次循环都会覆盖上一次创建的Worker实例引用
  • onmessage监听函数绑定写在了循环外部,仅最后一个Worker实例被绑定了消息监听逻辑,其余3个Worker发送的消息没有对应的处理函数,自然不会打印日志
  • 当前仅创建了4个Worker,若要实现总计8次输出,要么调整循环次数为8,要么让单个Worker输出2次消息

修复方案

方案1:创建8个Worker,每个输出1次(匹配你每个线程输出1次的需求)

修复后的main.js

// 用数组存储所有Worker实例,避免引用被意外覆盖
const workers = [];
for (let workersAmount = 0; workersAmount < 8; workersAmount++) {
    const socketWorker = new Worker("worker.js");
    // 循环内给每个Worker单独绑定消息监听
    socketWorker.onmessage = function(event) {
        console.log(event.data);
        // 不需要继续通信可以手动销毁Worker释放资源
        socketWorker.terminate();
    }
    workers.push(socketWorker);
}

worker.js无需修改,原有代码即可生效

postMessage("Why can't it just work!")

方案2:保留4个Worker,每个输出2次

如果不想创建8个线程,只需修改worker.js即可实现8次输出:

postMessage("Why can't it just work!")
postMessage("Why can't it just work!")

内容的提问来源于stack exchange,提问作者user15708443

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 12:57:03