2 回答
TA贡献1772条经验 获得超6个赞
您实际上可以通过将 cache:true 添加到配置对象来指定 $http 来缓存结果。
function getHotels() {
return $http.get('/hotels/getHotelsData', {cache:true});
}
您可以在此处阅读有关 $http 配置的更多信息:https ://docs.angularjs.org/api/ng/service/$http
还要澄清一下,$q.defer 是一个帮助器,它允许您将非承诺 API 回调包装为承诺。$http 返回一个承诺。您可以只返回 $http.get 的响应并对其执行 .then 。
如果您需要在返回数据之前对其进行操作,您仍然不需要将其包装在 $q.defer() 中
function getHotels() {
return $http.get('/hotels/getHotelsData', {cache:true})
.then(function(response){
response.data[0].hotelName = 'changedName';
return response;
})
}
TA贡献1811条经验 获得超4个赞
该getHotels函数有一个竞争条件:在数据从服务器返回之前对该函数的第二次调用将允许第二次 HTTP GET 请求。
由于 $http 服务会立即返回一个 Promise,因此最好缓存该 Promise。
var hotelsPromise = null;
function getHotels(){
if (hotelsPromise) return hotelsPromise;
//ELSE
hotelsPromise = $http.get('/hotels/getHotelsData')
.then(function successCallback(response){
return response.data;
},
function errorCallback(response){
throw 'Failed to retrieve hotels';
});
return hotelsPromise;
}
这将避免错误的多个 HTTP GET 请求。
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报