我正在使用此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对象,里面有很多方法和其他东西(不是数据)。