AngularJS: Vermeiden Sie es, denselben REST-Service zweimal aufzurufen, bevor eine Antwort eingeht.

Ich habe zwei Direktiven, von denen jede dieselbe Factory verwendet, die einen $ q / $ http-Aufruf umschließt.

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

Problem: Wenn ich das tue

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

Ich erhalte den gleichen Webdienst zweimal ausgelöst, da das GET von ItemA noch ausgeführt wird, wenn das GET für ItemB ausgeführt wird.

Gibt es eine Möglichkeit für jeden, der als zweiter feuert, zu wissen, dass bereits eine Anforderung in Bearbeitung ist, sodass er eine Minute warten und diese kostenlos herunterladen kann?

Ich habe darüber nachgedacht, einen $ http- oder $ q-Wrapper zu erstellen, der jede URL als ausstehend markiert oder nicht, aber ich bin mir nicht sicher, ob dies der beste Weg ist. Was würde ich tun, wenn es anhängig wäre? Geben Sie einfach das vorhandene Versprechen zurück und es wird aufgelöst, wenn das andere aufgelöst wir

Antworten auf die Frage(2)

Ihre Antwort auf die Frage