У меня есть приложение 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?
Каждый раз, когда вы вызываете doKeywordSearch
вы добавляете другого слушателя, вызывая
socket.on('searchResults', function (results) {
console.log(results);
});
Убедитесь, что вы только вызываете socket.on('searchResults'...
один раз после загрузки вашего приложения.