Событие Stop Socket IO запускается столько же раз, сколько оно вызывается

0

У меня есть приложение 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?

Теги:
socket.io

1 ответ

0
Лучший ответ

Каждый раз, когда вы вызываете doKeywordSearch вы добавляете другого слушателя, вызывая

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

Убедитесь, что вы только вызываете socket.on('searchResults'... один раз после загрузки вашего приложения.

  • 0
    о да ... это было глупо с моей стороны .. спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню