这是一个侦听端口 5000 上的消息的文件。函数侦听中的控制台.log(状态)似乎打印真假但是,当将状态导出到其他文件时,我仍然得到"无"而不是真假......有什么建议吗?
var dgram = require('dgram');
var net = require('net');
var status="none";
var num=0;
var LOCAL_UDP_PORT=5000;
exports.listen=function(){
// TCP and UDP listeners
var sock = dgram.createSocket('udp4');
sock.on('message', function(msg, rinfo) {
try{
var obj = JSON.parse(msg);
if (obj.class == ".Announce") {
if(obj.dev.id == "BLA") {
status=true;
}
else
status=false;
}
console.log(status);
}
} catch(e){
// do nothing an err
}
});
sock.bind(LOCAL_UDP_PORT);
}
//Initialize
exports.status=status;
listen();
我想原因是,status需要一个字符串对象,当你执行status=true/false
时,引用会改变,但exports.status
会保留原始引用
尝试
var status={val:"none"};
...
status.val = true;
...
// in the module reading the value,
var status = status.val;
传入的
套接字消息是异步的。 这意味着它们会在未来的某个时候到达。 如果要在另一个模块进来时通知它们,则需要创建一个通知系统并导出通知系统,以便另一个模块可以注册对获得通知的兴趣。
您可以使用事件发射器、回调、承诺等创建通知系统... 为什么选择技术将准确决定您将导出的内容以及调用者将如何注册他们的兴趣。