首页 > 解决方案 > 如何从nodejs中的工作线程修改全局变量

问题描述

我最近遇到工作线程是nodejs中实现的一个新功能,但是似乎没有办法从工作线程访问和修改它,你知道有什么办法吗?

const { Worker, isMainThread, parentPort } = require('worker_threads');

global.myvar = "initial variable"


if (isMainThread) {
  const worker = new Worker(__filename);
// Receive messages from the worker thread
  worker.once('message', (message) => {
    console.log(message + ' received from the worker thread!');
  });
// Send a ping message to the spawned worker thread 
  worker.postMessage("");

  setTimeout(function() {
    console.log("final variable : " + global.myvar);
  }, 2000);

} else {
  // When a ping message received, send a pong message back.
  console.log("inside worker thread");
  parentPort.on('message', (message) => {
        global.myvar = "worker variable"
  });
}

在这段代码中,我希望最终的变量是 value "worker variable",但它显示"initial variable"了,我可以知道如何解决这个问题吗?

标签: javascriptnode.jsvariablesscope

解决方案


工作线程和主线程运行在完全独立的 JavaScript 环境中。他们每个人都有自己的一组全局变量,等等。

worker 不能直接修改父变量的内容。它需要通过消息向父级发送更新,父级将通过更新全局变量来处理该更新。


推荐阅读