Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Angularjs 停止套接字IO事件触发与调用次数相同的事件_Angularjs_Node.js_Socket.io - Fatal编程技术网

Angularjs 停止套接字IO事件触发与调用次数相同的事件

Angularjs 停止套接字IO事件触发与调用次数相同的事件,angularjs,node.js,socket.io,Angularjs,Node.js,Socket.io,我有一个Ionic/AngularJS应用程序,它向我的节点服务器发送函数中的事件,如下所示: $scope.doKeywordSearch = function (keyword, details) { var lat = details.geometry.location.lat(); var lng = details.geometry.location.lng(); socket.emit('keywordSearch', {lat: lat, lng: ln

我有一个Ionic/AngularJS应用程序,它向我的节点服务器发送函数中的事件,如下所示:

  $scope.doKeywordSearch = function (keyword, details) {
    var lat = details.geometry.location.lat();
    var lng = details.geometry.location.lng();
    socket.emit('keywordSearch', {lat: lat, lng: lng, keyword: keyword});
    socket.on('searchResults', function (results) {
      console.log(results);
    });
  }
在服务器上,事件的处理方式如下:

io.sockets.on('connection', function(socket) {
  socket.on('keywordSearch', function(searchData) {
    var searchResults = [];
    function(){
      //do loads of search stuff here
    }
    setTimeout(function(){
      socket.emit('searchResults', {results: searchResults});
    },2000)
  })
});
socket.on('searchResults', function (results) {
  console.log(results);
});
客户端上的searchResults事件的处理方式如下:

io.sockets.on('connection', function(socket) {
  socket.on('keywordSearch', function(searchData) {
    var searchResults = [];
    function(){
      //do loads of search stuff here
    }
    setTimeout(function(){
      socket.emit('searchResults', {results: searchResults});
    },2000)
  })
});
socket.on('searchResults', function (results) {
  console.log(results);
});
每次调用该函数时,返回的结果与我之前在节点应用程序运行时调用该函数的次数相同,+1。所以它每次都递增

如何阻止这种情况发生,并使它在每次调用函数时返回一次? 我构造Socket.io事件的方式是否有错误?

每次调用doKeywordSearch时,您都会通过调用添加另一个侦听器

socket.on('searchResults', function (results) {
    console.log(results);
});
确保只调用套接字。在“searchResults”上。。。在你的应用程序加载后