Node.js 变量不再在套接字消息函数的作用域中?
这是一个侦听端口5000上消息的文件。 函数listen中的console.log(status)似乎正在打印true和false 然而,当将状态导出到其他文件时,我仍然得到“无”而不是true和false。。。有什么建议吗Node.js 变量不再在套接字消息函数的作用域中?,node.js,sockets,Node.js,Sockets,这是一个侦听端口5000上消息的文件。 函数listen中的console.log(status)似乎正在打印true和false 然而,当将状态导出到其他文件时,我仍然得到“无”而不是true和false。。。有什么建议吗 var dgram = require('dgram'); var net = require('net'); var status="none"; var num=0; var LOCAL_UDP_PORT=5000; exports.listen=function(
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接受一个string对象,当您执行
status=true/false
时,引用会更改,但会导出。status
将保留原始引用
试一试
传入的套接字消息是异步的。这意味着他们会在将来某个时候到达。如果您想在其他模块进入时通知它们,则需要创建一个通知系统并导出该通知系统,以便其他模块可以注册获取通知的兴趣
您可以使用eventEmitter、回调、承诺等创建通知系统。。。为什么您选择的技术将决定您将导出什么以及调用方将如何注册他们的兴趣。我在开始时尝试让var status=false。我一直给我false,即使函数中的状态是true,就像我说的,当您选择
status=true
或status='none'
时,即使您已经说过导出.status=status,exports.status
将开始引用不同的对象…我尝试了您的建议。。我在读取它的模块中使用in status.val。。还是没有。。sigh@highriser就像jfriend00说的,你什么时候检查状态
值?谢谢jfriend00。。我是个新手。。下面我们来看看如何创建eventEmitter:)
var status={val:"none"};
...
status.val = true;
...
// in the module reading the value,
var status = status.val;