使用自定义方法时,永远不会调用有关角度承诺的通知回调

时间:2017-09-19 13:26:53

标签: angularjs callback promise decorator notify

我有一个装饰者添加 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,我想在装饰器上做同样的事情,但我想还需要更多东西。

如果我的装饰师很好并且错误在其他地方,我可以把所有相关的代码,只是问。

1 个答案:

答案 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;
    });
  });

在调试器上,两个代码都显示完全相同的结果。但是这个有效,原创并没有。