【发布时间】:2015-01-02 20:49:49
【问题描述】:
我的服务需要异步检索一个值,但一旦我拥有它,我想使用该值的缓存版本。
当两个控制器调用此服务时,我希望第一个控制器缓存检索到的值,而第二个控制器使用缓存值,但根据日志,我从未找到缓存值。当它运行时,我看到一条日志消息,显示正在缓存的值,然后,当我按照角度路由到不同的控制器时,我看不到服务找到缓存的值。为什么它没有按我的预期运行**?**
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) 当值被缓存时,我返回一个已履行的承诺,所以该函数总是返回一个承诺......也不确定是否需要,但认为它不会受到伤害。
【问题讨论】:
-
那么到底是什么问题?
-
它在代码下方的问题中说明。我将问题部分移到代码上方
-
检查过其他类似的问题吗? stackoverflow.com/questions/15100020/…
-
您没有在任何地方提出问题。这一点从没有问号就已经很清楚了。但是,如果您没有获得缓存命中,可能仅仅是因为
Config._currentYear直到两个调用都被执行之后才被分配一些值(即 then() 函数返回一个承诺,所以两个调用可能已经在 @ 987654324@ 在分配新值之前。) -
@ochi 在建议的副本中,答案似乎是页面重新加载时缓存的值丢失了。我的应用正在使用角度路由,并且在不重新加载页面的情况下出现问题。
标签: javascript angularjs parse-platform promise angularjs-service