Javascript 得到承诺而不是回访
我正在使用本文中提到的提供程序,使用回调可以很好地工作 我尝试在回调时返回承诺,并添加了onPromise方法,修改后的代码如下: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){
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)无论何时从服务器推送数据,都会执行strong>方法。注入套接字后,我的控制器调用
socket.onPromise('status').then(function(socket){
console.log(socket);
});
console.log只调用一次。此外,控制台中使用promise和callback打印的套接字也不同。Callback会打印数据,但promise会给我一个socket对象,其中包含很多方法和其他东西(不是数据)。一个promise只能解析/拒绝一次-这就是为什么控制台日志只能一次使用
return$q.resolve(…)
或return$q.reject(…)
。这将返回已解决或拒绝的承诺。