Her biri aynı fabrikada $ q/$ http araması yapan iki yönerge var.AngularJS: Yanıt alınmadan önce iki kez aynı REST servisini çağırmaktan kaçının
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);
});
}
};
}]);
Sorun: Bu
<div item-a></div>
<div item-b></div>
yaptığınızda ben ItemB için GET gittiğinde ITEMA gelen GET hâlâ devam ediyor, çünkü aynı web hizmeti, iki kez ateş ettim olsun.
Bu işlemin devam eden bir isteğinin olduğunu bilmek için ikinci bir durumun hangisi olduğu konusunda bir yol var mıdır, böylece bir dakika bekleyebilir ve ücretsiz olarak alabilir mi?
Her URL'yi bekleyen veya beklemeden işaretleyen bir $ http veya $ q sarmalayıcı yapmayı düşündüm, ancak bunun en iyi yol olduğundan emin değilim. Beklemede olsaydım ne yapmalıyım? Sadece varolan vaadini iade et ve diğeri düzeldiğinde çözülecek mi?
Belki de, denetleyicinizde hizmeti bir kez arayabilir ve nesneyi her iki yönergesine de iletebilirsiniz? –