在AngularJs Service的回调函数中包装socket.io是否有任何缺点?

时间:2016-04-20 00:46:07

标签: angularjs socket.io

我在angular.js中创建了一个服务,在我的控制器中使用socket.io,就像它是一个回调函数。在我的服务中,发射器和监听器与我在控制器中使用的功能相同,如下所示。

service.js

(function () {
/* Socket IO Service */
var service = angular.module('MyService', ['']);


service.factory('sio', ['$http', function($http){

    var socket;
    socket = io.connect('http://localhost:3000');

    return {
        /* queries  user */
        login: function(authData, callback){
            socket.emit('__app auth login', authData);
            var response = socket.on('__app auth login', function(res){
                callback("", res);
            });
            return response;
        },
        findUser: function(conditions, callback){
            socket.emit('__app user find', conditions);
            var response = socket.on('__app user find', function(res){
                callback("", res);
            });
            return response;
        },
    };
  }]);
})();

我的控制器

(function () {
/* My Controller */
var myController = angular.module('MyCtrl', ['']);

myController.controller('MyController', function($scope, sio){
    var conditions = {username:"john123"};

    $scope.conditions = conditions;
    $scope.message = "Hello";

    this.search = function(){
        sio.findUser(conditions, function(err, response){
            $scope.message = response.status;
            console.log(response);
        });
    }
    $scope.search = this.search;
  });// /--ctrl
})();

一切似乎都有效,我的问题是,是否存在使用它的问题或缺点?或者我应该只在服务中包装socket.io对象?谢谢你提前。

1 个答案:

答案 0 :(得分:0)

除了潜在的违反预期行为之外,没有固有的缺点,具体取决于公认的最佳实践。问题是它们是否与它们一致。

因为实际的工作(连接和保持打开连接的插座)是在单件服务中完成的,所以您不必担心连接死亡。

尽管如此,最佳实践将要求所有与服务相关的工作都应该在服务本身中完成。这是否延伸到承诺的回调?根据{{​​3}},应该从服务返回promise,以便它们可以在调用控制器中链接。

因此,根据AngularJS社区内大量意外情况目前被认为是最佳做法,您的实施不会 符合绝对最佳做法,尽管是完全合理的。