停止Socket IO事件触发它被调用的次数相同

时间:2015-11-25 17:51:09

标签: angularjs node.js socket.io

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

  $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)
  })
});

客户端上的searchResults事件的处理方式如下:

socket.on('searchResults', function (results) {
  console.log(results);
});

每次调用该函数时,返回的结果与我在Node应用程序运行时调用函数的次数相同,+ 1。因此每次都会递增。

如何阻止这种情况发生,并且每次调用该函数时都返回一次? 我构建Socket.io事件的方式有错误吗?

1 个答案:

答案 0 :(得分:0)

每次拨打doKeywordSearch时,都会通过调用

添加另一个侦听器
socket.on('searchResults', function (results) {
    console.log(results);
});

确保只在加载应用后调用socket.on('searchResults'...