我有一个装饰者添加 promise.progress(回调)方法,以承诺在 promise.notify()时启动回调:
angular
.module('myApi', [])
.config(function ($provide) {
$provide.decorator('$q', function ($delegate) {
var defer = $delegate.defer;
$delegate.defer = function () {
var deferred = defer();
Object.getPrototypeOf(deferred.promise).progress = function(callback) {
return deferred.promise.then(null, null, callback);
}
return deferred;
};
return $delegate;
});
});
执行get("/myUrl").then(callback1, callback2, callback3);
工作正常,每次有通知时调用callback3(使用angular.noop强制angular来安排通知)。但是当我使用额外的方法时,它不起作用:
get("/myUrl")
.then(callback1)
.catch(callback2)
.progress(callback3);
没有输出错误。一切都很好“,只是callback3永远不会被调用。由于angular将.catch定义为只返回带有.then(null,callback)的promise,我想在装饰器上做同样的事情,但我想还需要更多东西。
如果我的装饰师很好并且错误在其他地方,我可以把所有相关的代码,只是问。
答案 0 :(得分:0)
解决。不知道究竟为什么,但这有效:
angular
.module('myApi', []).config(function ($provide) {
$provide.decorator('$q', function ($delegate) {
var defer = $delegate.defer;
$delegate.defer = function () {
var deferred = defer();
Object.getPrototypeOf(deferred.promise).progress = function(callback) {
return this.then(null, null, callback);
}
return deferred;
};
return $delegate;
});
});
在调试器上,两个代码都显示完全相同的结果。但是这个有效,原创并没有。