2 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
您實(shí)際上可以通過(guò)將 cache:true 添加到配置對(duì)象來(lái)指定 $http 來(lái)緩存結(jié)果。
function getHotels() {
return $http.get('/hotels/getHotelsData', {cache:true});
}
您可以在此處閱讀有關(guān) $http 配置的更多信息:https ://docs.angularjs.org/api/ng/service/$http
還要澄清一下,$q.defer 是一個(gè)幫助器,它允許您將非承諾 API 回調(diào)包裝為承諾。$http 返回一個(gè)承諾。您可以只返回 $http.get 的響應(yīng)并對(duì)其執(zhí)行 .then 。
如果您需要在返回?cái)?shù)據(jù)之前對(duì)其進(jìn)行操作,您仍然不需要將其包裝在 $q.defer() 中
function getHotels() {
return $http.get('/hotels/getHotelsData', {cache:true})
.then(function(response){
response.data[0].hotelName = 'changedName';
return response;
})
}

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
該getHotels函數(shù)有一個(gè)競(jìng)爭(zhēng)條件:在數(shù)據(jù)從服務(wù)器返回之前對(duì)該函數(shù)的第二次調(diào)用將允許第二次 HTTP GET 請(qǐng)求。
由于 $http 服務(wù)會(huì)立即返回一個(gè) 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;
}
這將避免錯(cuò)誤的多個(gè) HTTP GET 請(qǐng)求。
- 2 回答
- 0 關(guān)注
- 193 瀏覽
添加回答
舉報(bào)