这是一个侦听端口5000上的消息的文件。 函数listen中的console.log(status)似乎是打印true和false 但是,当将状态导出到其他文件时,我仍然会得到“none”而不是true和false ......有什么建议吗?
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();
答案 0 :(得分:0)
我猜原因是,status采用字符串对象,当您执行status=true/false
时,引用会更改,但exports.status
会保留原始引用
尝试
var status={val:"none"};
...
status.val = true;
...
// in the module reading the value,
var status = status.val;
答案 1 :(得分:0)
传入的套接字消息是异步的。这意味着他们将来某个时候到达。如果您想在其他模块进入时通知,则需要创建通知系统并导出通知系统,以便其他模块可以注册获得通知的兴趣。
您可以使用eventEmitter创建通知系统,使用回调,使用承诺等...为什么您选择的技术将确切地确定您将导出的内容以及调用者如何注册他们的兴趣。