我想建立一個服務或工廠,允許我通過一些API調用加載日期。 大部分數據都需要重新使用,所以基本上我只想進行一次API調用,下一次我需要這些數據時,它應該只是返回它。Angular.js服務/工廠與可重複使用的數據
現在每當我進行API調用,並且在完成之前,我都會進行相同的調用,我希望第二個調用等待,直到第一個調用完成。
本質上講,當我這樣做:
dataService.getMenu() // Make API call
dataService.getMenu() // Wait for the first API call to be completed and return that data
// Somewhere else
dataService.getMenu() // Return data as API call was already made
我廠是這樣的:
(function() {
var app = angular.module('dataService', []);
app.factory('dataService', ['$http', '$q', function($http, $q) {
var links = [],
jobs = [];
return {
getMenu: function() {
var deferred = $q.defer();
console.log(links);
if(links.length > 0) {
deferred.resolve(links);
} else {
$http.get('../server/api.php?ajax=true&action=getCats').success(function(data) {
links = data;
deferred.resolve(data);
})
}
return deferred.promise;
}
}
}])
})();
我的想法是太多,但如果我叫'getMenu'快兩倍,它會執行一個'$ http.get()'2次,是否只需要添加一個額外的變量來查看是否已經創建了通話? – 2014-09-27 05:24:28
我可能已經解釋了自己的錯誤,基本上在加載'$ http.get()'時會有幾秒鐘的時間,無論何時在此期間調用'getMenu()',我都不想進行相同的調用再次。 – 2014-09-27 05:26:37
是的,這種方法第二個電話不會去。記住函數總是返回相同的延遲對象。對函數的第一次調用會創建延遲對象,所有其他對象都會得到相同的延遲。 – Chandermani 2014-09-27 07:33:54