Javascript 在socket.on处理程序外部使用数据
这可能是一个简单的答案,但我很难弄明白。我想使用socket.on之外的这些套接字中的数据来比较它们,以便做一些事情。我尝试过使用全局变量,但运气不好。我正在考虑对它们进行分组,但是“master”是一个io.emit,id是一个socket.emitJavascript 在socket.on处理程序外部使用数据,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,这可能是一个简单的答案,但我很难弄明白。我想使用socket.on之外的这些套接字中的数据来比较它们,以便做一些事情。我尝试过使用全局变量,但运气不好。我正在考虑对它们进行分组,但是“master”是一个io.emit,id是一个socket.emit var playerId; var masterId; // Player socket.id socket.on('id', function(data){ console.log(data.id); var playerId
var playerId;
var masterId;
// Player socket.id
socket.on('id', function(data){
console.log(data.id);
var playerId = data.id;
});
// // Master socket.id
socket.on('master', function(data){
console.log(data.master + ' is the master');
var masterId = data.master;
});
if (playerId == masterId){
// do something
}
通常,您需要在该socket.on中执行所有您想执行的操作,除非您将消息传递给其他地方运行的另一个循环,或者从socket.on调用另一个函数 似乎您正在尝试同步这两个事件,在您收到这两个事件后,您希望比较if
playerId==masterId
var playerId = null;
var masterId = null;
// Player socket.id
socket.on('id', function(data){
console.log(data.id);
var playerId = data.id;
checkId();
});
// // Master socket.id
socket.on('master', function(data){
console.log(data.master + ' is the master');
var masterId = data.master;
checkId();
});
function checkId() {
if (playerId && masterId
&& playerId == masterId) {
// do something
}
}
有几个问题你是如何处理的 首先是范围问题。当您在函数内使用
var playerId
时,全局playerId
和masterId
没有本质上的错误playerId
成为该函数的作用域,而不管其名称是否相同。例如:
var playerId=2;
函数作用域(数据){
var playerId=data.id;
log(`func.scoped`中的${playerId});
}
范围({
身份证号码:4
});
log(`global scope`${playerId})代码>
正文{
保证金:0;
}
.作为控制台包装{
身高:100%;
最大高度:初始!重要;
}