How can I extend $q promise in Angularjs with a .success and .error

后端 未结 3 1599
有刺的猬
有刺的猬 2020-12-28 15:37

I wrote this little code in a custom service in AngularJS.

In my service:

        var deferred = $q.defer();
        var promise = deferred.promise;         


        
3条回答
  •  鱼传尺愫
    2020-12-28 16:28

    Here's a full solution picking up where @jessegavin left off.

    var myApp = angular.module("myApp", []);
    
    myApp.config(function ($provide) {
    
      $provide.decorator('$q', function ($delegate) {
        var defer = $delegate.defer;
        $delegate.defer = function () {
          var deferred = defer();
          deferred.promise.success = function (fn) {
            deferred.promise.then(function(response) {
              fn(response.data, response.status, response.headers);
            });
          return deferred.promise;
          };
          deferred.promise.error = function (fn) {
            deferred.promise.then(null, function(response) {
              fn(response.data, response.status, response.headers);
            });
            return deferred.promise;
          };
          return deferred;
        };
        return $delegate;
      });
    
    });
    

提交回复
热议问题