AngularJS - 具有缓存响应的多个API调用

时间:2014-07-22 14:55:40

标签: angularjs promise

我希望我的控制器能够通过服务从API获取指标列表:

Controller.js

dataService.getIndicators( ["a", "b", "c"] )

DataService.js

this.cachedIndicators = {};
var baseURL = "www.myapi.com/jsonp/indicator/";
this.getIndicators = function(indicators){
    //for each indicator not in cache, retrieve it using $http.jsonp()
    //when done, indicate that data 
}

我可以在这里使用AngularJS缓存和承诺吗? (样本实施将受到欢迎。)

2 个答案:

答案 0 :(得分:1)

如果每个指标都有自己的资源,并且您需要发出多个请求并且想要等到所有请求都完成,那么您可以使用$ q.all(..)方法返回包含多个promise的单个promise。

例如:

this.getIndicators = $q.all([
    $http.jsonp(url1, { cache: true }).then( .. process individual result here ..),
    $http.jsonp(url2, { cache: true })
])

答案 1 :(得分:0)

当然可以。在您的服务中,返回$ http.jsonp()调用结果的承诺...

this.cachedIndicators = {};
var baseURL = "www.myapi.com/jsonp/indicator/";
this.getIndicators = function(indicators){
    return $http.jsonp(baseURL, { cache: true });
}

...然后修改您的控制器以处理承诺的结果......

dataService.getIndicators( ["a", "b", "c"] ).then(function(data){
    // do stuff with the returned data
});