我想建立一个服务或工厂,允许我通过一些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