Моей службе необходимо получить значение асинхронно, но как только оно у меня появится, я хотел бы использовать кешированную версию значения.
Когда два контроллера вызывают эту службу, я ожидаю, что первый будет кэшировать полученное значение, а второй использовать кэшированное значение, но, согласно журналу, я никогда не нахожу кэшированное значение. Когда это выполняется, я вижу сообщение журнала, в котором показано кэшированное значение, а затем, когда я следую угловому маршруту к другому контроллеру, я не вижу, что служба находит кэшированное значение. Почему он не работает в соответствии с моими ожиданиями**?**
angular.module('myApp.services').factory('Config', function() {
var Config = { };
Config.currentYear = function() {
if (Config._currentYear) {
// sadly, we never execute here
console.log("returning cached year");
return Parse.Promise.as(Config._currentYear);
}
return Parse.Config.get().then(function(config) {
console.log("caching year");
Config._currentYear = config.get("currentYear");
return Config._currentYear;
});
};
return Config;
});
Пара замечаний: (1) я назвал кешированный атрибут _currentYear, добавив подчеркивание, чтобы избежать конфликта с именем функции. Не уверен, что мне нужно это делать. (2) Я возвращаю выполненное обещание, когда значение кешируется, поэтому функция всегда возвращает обещание... также не уверен, что это необходимо, но думаю, что это не повредит.