发出 Socket.io 消息并等待结果的更好结构
better structure for emitting a Socket.io message and waiting for result
我像这样将 Socket.io
与 Angular.js
一起使用:
//socket emitter
$scope.checkUsername = function (username) {
$scope.socket.emit('checkUsername', {username: username});
};
.
.
.
.
.
//socket listener
$scope.socket.on('checkUsernameResult', function (result) {
$scope.$apply(function () {
//Do something with result
});
});
我的意思是,我设置了一个用于发射的块和一个用于监听的代码块,它们可以在代码中的任何位置甚至另一个文件中。我的问题是:有没有更好的方法来写这个?
例如,我想检查用户名可用性,我想编写一个代码来发送数据并等待结果,当我们在 Node.js
中创建回调函数时,就在它自己的结构中。
我认为我这样写代码是不正确的。我说的是客户端(Angular 控制器)
app.factory('socket', function($rootScope) {
var socket = io.connect("http://localhost:8000");
return {
on: function(eventName, callback) {
socket.on(eventName, function() {
var args = arguments;
$rootScope.$apply(function() {
callback.apply(socket, args);
});
});
},
emit: function(eventName, data, callback) {
socket.emit(eventName, data, function() {
var args = arguments;
$rootScope.$apply(function() {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});
然后让您的听众使用您的回调调用函数。
function doSomething(req) {
return true;
}
socket.on('some listener', doSomething(req));
并发射。
socket.emit("some emit event", {some: '', stuff: ''});
我像这样将 Socket.io
与 Angular.js
一起使用:
//socket emitter
$scope.checkUsername = function (username) {
$scope.socket.emit('checkUsername', {username: username});
};
.
.
.
.
.
//socket listener
$scope.socket.on('checkUsernameResult', function (result) {
$scope.$apply(function () {
//Do something with result
});
});
我的意思是,我设置了一个用于发射的块和一个用于监听的代码块,它们可以在代码中的任何位置甚至另一个文件中。我的问题是:有没有更好的方法来写这个?
例如,我想检查用户名可用性,我想编写一个代码来发送数据并等待结果,当我们在 Node.js
中创建回调函数时,就在它自己的结构中。
我认为我这样写代码是不正确的。我说的是客户端(Angular 控制器)
app.factory('socket', function($rootScope) {
var socket = io.connect("http://localhost:8000");
return {
on: function(eventName, callback) {
socket.on(eventName, function() {
var args = arguments;
$rootScope.$apply(function() {
callback.apply(socket, args);
});
});
},
emit: function(eventName, data, callback) {
socket.emit(eventName, data, function() {
var args = arguments;
$rootScope.$apply(function() {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});
然后让您的听众使用您的回调调用函数。
function doSomething(req) {
return true;
}
socket.on('some listener', doSomething(req));
并发射。
socket.emit("some emit event", {some: '', stuff: ''});