我有一些使用socket.io
的在线多人游戏代码。有一次,客户端将数据发送到服务器,以接收和处理这些数据,我在for循环中有一个socket。
服务器:
function callBack(hand, upCards) {
return function() {
io.to('game_room').emit('log', 'callback');
players[i].socket.off('swapdone', runSwap);
players[i].swapped = true;
io.to('game_room').emit('log', 'call doswap');
doSwap(i, hand, upCards);
};
};
for (i = 0; i < players.length; i++ ){
players[i].socket.on('swapdone', function(hand, upCards) {
return callBack(i, hand, upCards);
});
};
hand
和upCards
是客户端使用socket.emit
最初,我的问题是由于没有使用回调函数来避免关闭问题,但是现在我添加了一个单独的callBack
函数来解决此问题。
现在的问题是,当客户端发送'swapdone'
信号时,callBack
函数内部的代码未执行。我尝试过移动函数,但总是遇到闭包回调问题,或者函数无法执行。
我想念什么?
答案 0 :(得分:0)
callBack
带有两个参数,您传递了三个参数。 i
应该是函数的第一个参数。另外,您必须正确声明i
:
for (let i = 0; i < players.length; i++ ){
另外,callBack
中的内部函数无用,因为它什么也不做。只需删除它即可。
我该怎么做:
function callBack(i) {
return function(hand, upCards) {
io.to('game_room').emit('log', 'callback');
players[i].socket.off('swapdone', runSwap);
players[i].swapped = true;
io.to('game_room').emit('log', 'call doswap');
doSwap(i, hand, upCards);
};
}
for (let i = 0; i < players.length; i++ ){
players[i].socket.on('swapdone', callBack(i));
}