【发布时间】:2013-09-15 16:37:21
【问题描述】:
我想使用 Promises 在 AngularJS 中实现静态资源的动态加载。问题:我在页面上有几个组件可能(或不,取决于显示的,因此是动态的)需要从服务器获取静态资源。加载后,可以在整个应用程序生命周期内进行缓存。
我已经实现了这个机制,但是我是 Angular 和 Promises 的新手,我想确定这是否是一个正确的解决方案\方法。
var data = null;
var deferredLoadData = null;
function loadDataPromise() {
if (deferredLoadData !== null)
return deferredLoadData.promise;
deferredLoadData = $q.defer();
$http.get("data.json").then(function (res) {
data = res.data;
return deferredLoadData.resolve();
}, function (res) {
return deferredLoadData.reject();
});
return deferredLoadData.promise;
}
因此,只发出了一个请求,接下来对 loadDataPromise() 的所有调用都会取回第一个做出的承诺。它似乎适用于正在进行中或前一段时间已经完成的请求。
但是缓存 Promises 是不是一个好的解决方案?
【问题讨论】:
-
此行不正确:
return deferredLoadData.resolve();。您应该只是deferredLoadData.resolve();和deferredLoadData.reject();。return语句使整个承诺返回undefined。 -
@arcol - 你是对的。这没有意义。事实上,它什么也没做。 (但它也不会破坏任何东西,因为没有使用链)
标签: javascript angularjs promise angular-promise