获得承诺而不是回调

时间:2015-07-13 13:34:58

标签: javascript angularjs sockets callback

我正在使用此url中提到的提供程序,它使用回调工作正常。

我试图在回调时返回一个promise,我添加了onPromise方法,修改后的代码如下:

this.$get = function esseSocketFactory($rootScope,$q) {

    var socket = io.connect(ioUrl);
    var defered = $q.defer();
    return {
        on: function on(event, callback){
            socket.on(event, function(){
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(socket, args);
                });
            });
        },
        onPromise: function onPromise(event){
          socket.on(event,function(){
            $rootScope.$apply(function () {
              defered.resolve(socket);
            });
          });
          return defered.promise;
        },

我面临的问题是在控制器中我们只获取一次数据,但只要从服务器推送数据,就会执行 onPromise:defered.resolve(socket); 方法。注入套接字后,我的控制器调用

socket.onPromise('status').then(function(socket){
    console.log(socket);
});

console.log 只调用一次。使用promise和callback在控制台中打印的套接字也是不同的。回调打印数据,但promise给了我一个socket对象,里面有很多方法和其他东西(不是数据)。

0 个答案:

没有答案