2016-09-12 10 views
0

data引数のサーバから来る配列を返すように定義されたソケットファクトリをsocket.on('user_entrance')に持っています。AngularファクトリーのSocket.io関数からの戻り値

.factory('sockets',function(){ 

var user_name = window.prompt('enter your name'); 

var socket = io('http://localhost:3002'); 

var online_users = []; 

socket.emit('user_name', user_name); 
    socket.on('user_entrance', function(data,my_id){ 

    online_users.push(data); 

    }); 

return online_users; 

}) 

と私はonline_usersを使用するコントローラで、私はそうのような「ソケットの工場」への依存を注入が、undefinedを返します。

.controller('ChatsCtrl', function($scope, Chats,sockets) { 


//this is undefined 
console.log(online_users); 


}) 

しかし、私はこのコードを任意のコントローラで実行するとうまくいきます。

.controller('someCtrl',function(){ 

var user_name = window.prompt('enter your name'); 

var socket = io('http://localhost:3002'); 

var online_users = []; 

socket.emit('user_name', user_name); 
    socket.on('user_entrance', function(data,my_id){ 

    online_users.push(data); 

    }); 


//this works fine 
    console.log(online_users); 

    }) 

私はこの作業を取得することができ、私は他のcontrollers.Howで返された値にアクセスできるように、工場内のコードを実行したいと思いますか?

答えて

0

あなたが工場を注入すると、あなたにそれが注入されたパラメータの名前でそれを参照する必要があります。これは働いていた

.controller('ChatsCtrl', function($scope, Chats,sockets) { 
    console.log(sockets); 
}) 
+0

、私は配列を返すことができました – yaboiduke