Como posso estender a promessa de $ q no Angularjs com um .sucesso e .error

Eu escrevi este pequeno código em um serviço personalizado no AngularJS.

No meu serviço:

        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;
        };

No meu controlador:

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

                $scope.success= data;

            })
            .error(function(data){

                $scope.error = data;

            });

Eu justei o sucesso e o erro da promessa (serviço $ q). Eu preciso deste código em muitos outros serviços, então eu iria estender diretamente o serviço $ q com um personalizado.

Então, eu gostaria de algo assim no meu serviço:

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

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

    return promise;

Qualquer ideia? Eu encontrei alguma explicação para estender filtro em Angularjs meu problema é encontrar a boa maneira de estender toda a funcionalidade do $ q e adicionar meu costume.

Eu começo com algo assim, é trabalho para lidar com o $ q fora da caixa:

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

  $qCustom = $q;  

});

questionAnswers(3)

yourAnswerToTheQuestion