Ես նախկինում տվել եմ այս հարցը (AngularJS-ը մի քանի անգամ մշակում է զանգերի խոստումը) և այժմ ես ունեն տարբեր խոչընդոտներ. Հիմա ես պետք է ստանամ քաղաքների ցուցակը, բայց կա բացառություն։
Քաղաքները կարող են մի քանի անգամ կոչվել երկրների պես (իմ հին հարցում), և ես պետք է պահեմ տվյալները՝ նույն տվյալների (քաղաքների) համար մի քանի զանգերը կանխելու համար: Հին հարցի լուծումը կարող է արգելափակել բազմաթիվ զանգեր, բայց հիմա ես պետք է թույլ տամ որոշ զանգեր (նոր երկրի քաղաքների համար):
Այսպիսով, իմ հարցն է. Ինչպե՞ս կարող եմ քեշավորել քաղաքների տվյալները՝ կանխելու նույն տվյալների կանչը: (Իմ գործառույթը պետք է պարզի, թե արդյոք զանգը վերաբերում է նոր երկրի քաղաքների ցանկին, թե ոչ: եթե այո, զանգահարեք ծառայություն և ստացեք քաղաքներ, եթե ոչ. վերադարձրեք քաղաքները քեշից)
Ահա իմ ծառայությունը.
var cityCache = {};
vm.getCities = function (countryCode) {
if (countryCode!=undefined && !cityCache[countryCode]) {
vm.cityPromise = $http({
method: 'POST',
cache: true,
url: API + '/api/Global/CountryCities',
data: {
"CountryCode": countryCode
}
}).then(function successCallback(response,countryCode) {
if (errorHandler(response.data)) {
console.log("cities come from ajax")
cityCache[response.config.data.CountryCode] = response.data;
console.log(cityCache)
return response.data
}
});
} else {
vm.cityPromise = $timeout(function () {//I use this to get promise object
return cityCache[countryCode]
}, 0)
console.log("cities comes from cache");
}
return vm.cityPromise;
}
Օրինակ. Ենթադրենք, ես զանգում եմ getCities ֆունկցիան միաժամանակ 3 անգամ: Ես դիտում եմ իմ ցանցային տրաֆիկը քրոմի միջոցով: Ես տեսնում եմ 3 ajax զանգ: Դա նորմալ է. Բայց երբեմն զանգում եմ նույն քաղաքը: Ես պետք է խմբագրեմ իմ գործառույթը, որը կարող է հասկանալ, թե արդյոք քաղաքի տվյալները նախկինում արդեն կանչված են (քեշի տեսակ):
Օրինակ. Եթե ես 3 անգամ հարցնեմ ֆունկցիան այս արգումենտներով.
1-Տվեք ինձ Գերմանիայի քաղաքները,
2-Տվեք ինձ Իռլանդիայի քաղաքները,
3-Տվեք ինձ Գերմանիայի քաղաքները (կրկին),
Զանգում է 3 անգամ: Բայց ես ուզում եմ 1 զանգ Գերմանիայի համար, 1 զանգ Իռլանդիայի համար: Ընդամենը 2 զանգ։