停止 Socket IO 事件触发相同次数的调用
Stop Socket IO event firing same number of times it's called
我有一个 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)
})
});
客户端的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'...
一次。
我有一个 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)
})
});
客户端的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'...
一次。