我正在用一个工厂连接到socket.io,我有一个socketId返回函数给我socketId
的连接,这样我就可以在网站上显示它(仅用于现在的测试)
我有我的工厂:
angular.module('testing').factory('socket', ['$rootScope', function($rootScope) {
var socket = io.connect();
return {
socketId: function(){
return socket.id;
}
//some more code here deleted for simplicity
};
}]);
并在我的控制器代码中:
_this.socketId = socket.socketId();
现在,当我打开页面时,socket.socketId()
会返回undefined
,但是当我按下该按钮后,我会得到socketId
。
问题:如何在连接后使socket.io更新我的变量_this.socketId
?
答案 0 :(得分:0)
您可以使用'承诺' ,Promise API
return {
socketId: function(){
var deferred = $q.defer();
var socket = io.connect();
socket.on('connect', function() {
deferred.resolve(socket.id); //Your socketid
});
return deferred.promise;
}
答案 1 :(得分:0)
看起来控制器中的socketId甚至在套接字连接之前就被初始化了!
如果您只是等待套接字在工厂连接并在连接后广播套接字ID并且您只需在控制器上监听它就不会更好。
//At the factory
var socket = io.connect();
socket.on("connect",function(){
$rootscope.$broadcast("socketId",socket.id);
});
//At the controller
$scope.$on("socketId",function(data){
_this.socketId = data;
});
我希望这会对你有所帮助,如果我在某个地方出错,请随时纠正我。