更好的发出Socket的结构.IO消息并等待结果

better structure for emitting a Socket.io message and waiting for result

本文关键字:消息 结果 IO 等待 结构 Socket 更好      更新时间:2023-09-26

我这样使用Socket.ioAngular.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: ''});