2016-01-26 2 views
2

Я использую angular-socket-io, но перед началом работы с интерфейсом socket.io вам необходимо пройти аутентификацию в приложении. I followed this method.AngularJS socket.io переадресация событий с отложенным обещанием

Но мне нужно использовать функцию пересылки событий на заводе as shown here так:

socket.forward("event"); 

Как я могу добавить пересылку в моей фабрике?

.factory('socket', function($rootScope, $timeout, socketFactory, $q, $log) { 
    // create a promise instance 
    var socket = $q.defer(); 
    // listen for the authenticated event emitted on the rootScope of 
    // the Angular app. Once the event is fired, create the socket and resolve 
    // the promise. 
    $rootScope.$on('authenticated', function() { 

    // resolve in another digest cycle 
    $timeout(function() { 
     var token = window.localStorage["socket_token"]; 
     var token_query = 'token=' + token; 
     var newSocket = (function() { 
     return socketFactory({ 
      ioSocket: io.connect('http://example.com:3000', { 
      query: token_query 
      }) 
     }); 
     })(); 
     socket.resolve(newSocket); 
    }); 
    }); 
    return socket.promise 
}); 

ответ

2

Вы можете просто добавить вызов forward() до того разрешения обещания с созданным сокетом:

newSocket = (function() { /* ... */ })() 
newSocket.forward("event"); 
socket.resolve(newSocket); 
+0

да это было так просто. – lilbiscuit

+0

посмотреть, можете ли вы помочь с [этой связанной проблемой] (http://stackoverflow.com/questions/35044402/angularjs-not-executing-deferred-promise-using-angular-socket-io) – lilbiscuit

Смежные вопросы