【问题标题】:better structure for emitting a Socket.io message and waiting for result用于发出 Socket.io 消息并等待结果的更好结构
【发布时间】:2015-07-22 21:50:22
【问题描述】:

我像这样使用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 控制器)

【问题讨论】:

    标签: javascript angularjs node.js socket.io


    【解决方案1】:
    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: ''});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多