AngularJS: Evite chamar o mesmo serviço REST duas vezes antes de receber a resposta

Eu tenho duas diretivas, cada uma consumindo a mesma fábrica, encerrando uma chamada $ q / $ http.

angular.module("demo").directive("itemA", ["restService", function(restService) {
    return {
        restrict: "A",
        link: function(scope, element, attrs) {
            restService.get().then(function(response) {
                // whatever
            }, function(response) {
               // whatever
            });
        }
    };
}]);


angular.module("demo").directive("itemB", ["restService", function(restService) {
    return {
        restrict: "A",
        link: function(scope, element, attrs) {
            restService.get().then(function(response) {
                // whatever
            }, function(response) {
               // whatever
            });
        }
    };
}]);

angular.module("demo").factory("restService", ["$http", "$q", function($http, $q) {
    return {
       get: function() {
           var dfd = $q.defer();
           $http.get("whatever.json", {
               cache: true
           }).success(function(response) {
              // do some stuff here
              dfd.resolve(response);
           }).error(function(response) {
              // do some stuff here
              dfd.reject(response);
           });
       }
    };
}]);

Problema: Quando eu faço isso

<div item-a></div>
<div item-b></div>

Eu recebo o mesmo serviço da Web acionado duas vezes, porque o GET do ItemA ainda está em andamento quando o GET do ItemB sai.

Existe uma maneira de o que disparar segundo saber que já existe um pedido para isso em andamento, para que ele possa esperar um minuto e pegá-lo gratuitamente?

Pensei em criar um invólucro $ http ou $ q que sinalize cada URL como pendente ou não, mas não tenho certeza de que seja a melhor maneira. O que eu faria se estivesse pendente? Basta retornar a promessa existente e ela será resolvida quando a outra resolver.

questionAnswers(1)

yourAnswerToTheQuestion