Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 套接字io在唱出并重新登录后返回两个数组_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 套接字io在唱出并重新登录后返回两个数组

Javascript 套接字io在唱出并重新登录后返回两个数组,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我希望套接字io向客户端发送一个数组。当用户首次登录时,这是成功的,但是当用户注销然后重新登录时,套接字io将发送相同阵列中的两个。我似乎不明白它为什么会这样。 以下是我的代码服务器端: var object = []; query.find({ success: function(results){ for(var i=0; i< results.length; i++){ var file = results[i].toJSON();

我希望套接字io向客户端发送一个数组。当用户首次登录时,这是成功的,但是当用户注销然后重新登录时,套接字io将发送相同阵列中的两个。我似乎不明白它为什么会这样。 以下是我的代码服务器端:

var object = [];
  query.find({
    success: function(results){
      for(var i=0; i< results.length; i++){
        var file = results[i].toJSON();
        for(var k in file){
          if (k ==="javaFile"){
            for(var t in file[k]){
               if (t === "name"){
                  temp = file[k][t];
                  var getname = temp.split("-").pop();
                  object[i] = getname;

               }                  
            }
          }
        }
      }
    }
  });

io.on('connection', function(socket){
    socket.emit("FileName", object);
     console.log(object);
  });

当您注销时,请确保取消听众的订阅

像这样的方法应该会奏效:

socket.removeAllListeners("FileName");
或者你也可以这样做:

socket.removeListener("FileName");
参考:

这意味着下次您登录时,只有一个订阅要发送到


注销时,您没有取消对套接字的订阅。所以你的socket.on'FileName'注册了两次。我似乎无法让它工作。我得到TypeError:侦听器必须是一个函数。在signout下的路由中,我在'disconnect'上写了io.on,functionsocket{socket.removeAllListener'FileName}@removeAllListeners你在结尾缺少一个S,我也试过了,它不起作用。我没有收到任何错误消息,但是它不会删除侦听器。
socket.removeListener("FileName");