AngularJS: Старайтесь не вызывать один и тот же сервис REST дважды до получения ответа

У меня есть две директивы, каждая из которых использует одну и ту же фабрику, заключающую в себе вызов $ 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);
           });
       }
    };
}]);

Проблема: когда я делаю это

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

Я получаю один и тот же веб-сервис дважды, потому что GET для ItemA все еще выполняется, когда GET для ItemB запускается.

Есть ли способ для того, чтобы любой второй раз узнать, что уже есть запрос на выполнение, чтобы он мог подождать минуту и ​​получить его бесплатно?

Я думал о создании оболочки $ http или $ q, которая помечает каждый URL как ожидающий или нет, но я не уверен, что это лучший способ. Что бы я сделал, если бы это ожидало? Просто верните существующее обещание, и оно разрешится, когда другое решит?

Ответы на вопрос(1)

Ваш ответ на вопрос