如何使用.succes和.error在Angularjs中扩展$q promise

我在AngularJS的定制服务中写了这个小代码

在我的服务:

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

        deferred.resolve('success');
        deferred.reject('error');

        /* Handle success and error */
        promise.success = function(fn) {

            promise.then(function(response) {

                fn(response);

            });

            return promise;
        };

        promise.error = function(fn) {

            promise.then(null,function(response) {

                fn(response);

            });

            return promise;
        };

在我的控制器:

promiseService.myPromise()
            .success(function(data){

                $scope.success= data;

            })
            .error(function(data){

                $scope.error = data;

            });

我正好从承诺($ q服务)处理成功和错误。我需要这个代码在很多其他服务,所以我将直接扩展$ q服务与一个自定义

所以我想要这样的服务:

var deferred = myPromiseService.$qCustom.defer();
    var promise = deferred.promise;

    deferred.resolve('success');
    deferred.reject('error');

    return promise;

任何想法?我发现一些解释在Angularjs中扩展过滤器,我的问题是找到扩展$ q的所有功能的好方法,并添加我的自定义

我从这样开始,可以处理$ q开箱即用:

angular.module('myApp').service('myPromiseService',function($q){

  $qCustom = $q;  

});
这是一个完整的解决方案,在@jessegavin离开的地方。
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.headers);
        });
        return deferred.promise;
      };
      return deferred;
    };
    return $delegate;
  });

});

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...