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

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

我像这样将 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: ''});