Javascript 得到承诺而不是回访

Javascript 得到承诺而不是回访,javascript,angularjs,sockets,callback,Javascript,Angularjs,Sockets,Callback,我正在使用本文中提到的提供程序,使用回调可以很好地工作 我尝试在回调时返回承诺,并添加了onPromise方法,修改后的代码如下: this.$get = function esseSocketFactory($rootScope,$q) { var socket = io.connect(ioUrl); var defered = $q.defer(); return { on: function on(event, callback){

我正在使用本文中提到的提供程序,使用回调可以很好地工作

我尝试在回调时返回承诺,并添加了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:delived.resolve(socket)方法。注入套接字后,我的控制器调用

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

console.log只调用一次。此外,控制台中使用promise和callback打印的套接字也不同。Callback会打印数据,但promise会给我一个socket对象,其中包含很多方法和其他东西(不是数据)。

一个promise只能解析/拒绝一次-这就是为什么控制台日志只能一次使用
return$q.resolve(…)
return$q.reject(…)
。这将返回已解决或拒绝的承诺。