You need to enable JavaScript to run this app. Node.js如何定时读取另一文件中经websocket持续更新的变量
优惠活动
大模型
产品
解决方案
定价
更多

Node.js如何定时读取另一文件中经websocket持续更新的变量

问题原因

你当前的写法拿不到最新值是因为:ES 模块导出基础类型值时是值拷贝,你在socket.js中导出的对象里的updatedVariable,是初始化时0的静态拷贝,后续你修改局部变量updatedVariable,不会同步更新到导出对象的属性上,所以 index.js 里每次读到的都是初始值。


解决方案1:使用 getter(无需修改 index.js 代码,改动最小)

修改socket.js的导出逻辑,给updatedVariable加一个 getter,每次读取时都会返回当前最新的局部变量值:

let updatedVariable = 0;

const ws = new WebSocket('wss://stream.com.....');
ws.on('message', function incoming(data) {
    updatedVariable = data;
});

export default {
  ws,
  // 加 getter,每次读取属性时动态返回最新值
  get updatedVariable() {
    return updatedVariable;
  }
}

改完后你原来的 index.js 代码不需要做任何调整,每秒打印的就是最新值。


解决方案2:用引用类型包裹变量

把要共享的变量放到对象/Map 这类引用类型里存储,导出引用类型后,修改内部属性会同步到所有引用的地方:
socket.js 修改:

// 用对象包裹,属于引用类型
const sharedState = {
  updatedVariable: 0
};

const ws = new WebSocket('wss://stream.com.....');
ws.on('message', function incoming(data) {
    // 直接修改对象的属性
    sharedState.updatedVariable = data;
});

export default {ws, sharedState}

index.js 修改读取路径:

import socket from './socket.js';

setInterval(tick, 1000);

const tick = () => {
    console.log(socket.sharedState.updatedVariable);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:27:00