私は(AngularJS handle calling promise multiple times)の前にこの質問をしましたが、今は別の障害があります。今私は都市リストを取得しなければならないが、例外がある。いくつかの例外を除いて約束を複数回呼び出すAngularJSハンドル
都市は、国のように(私の古い質問で)複数回呼び出すことができ、同じデータ(都市)を複数回呼び出すのを防ぐためにデータをキャッシュする必要があります。古い質問の解決策は複数の通話をブロックすることができますが、今では(新しい国の都市のために)いくつかの通話をする必要があります。
私の質問は次のとおりです。 同じデータの呼び出しを防ぐために都市データをキャッシュするにはどうすればよいですか? (My機能は、コールが新しい国の都市のリストのためであるかどうキャッチする必要がありそうならば:。ない場合は、サービスを呼び出すと都市を取得:キャッシュからの戻り都市):
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コール。
質問は不明です。あなたは何をしたいのですか?そして、それはあなたのコードではうまくいきません。 –
ありがとう、私は質問を編集しました。 – Sam