function SomeService(Restangular) {
var promiseConf = getConf();
function getConf() { // get from database
return Restangular.all('conf').getList().then(function(conf) {
return conf;
})
}
function getConfObject() {
return promiseConf.then(confArr => {
return _(confArr).keyBy('myConf').value();
});
}
}
现在,在init()
方法的许多控制器中,我做了:
this.config = null;
init () {
...
this.SomeService.getConfObject().then(conf => {
this.config = do some thing with conf
});
...
}
methodA () {
// Can I be sure that in this place this.config is initialized from databse ?
}
问题是:我可以确定在init()
之后调用所有方法吗?
换句话说,配置所有方法都需要初始化this.config
如果我不能假设它,如何达到这个效果?请记住我的代码。
答案 0 :(得分:1)
promise的.then
方法返回一个可用于链接的新promise:
this.config = null;
init () {
this.configPromise = this.SomeService.getConfObject()
.then(conf => {
this.config = conf;
return this.config;
});
}
通过保存返回的promise,依赖于异步数据的代码可以chain来自该承诺:
methodA () {
// Can I be sure that in this place this.config
// is initialized from databse ?
this.configPromise.then(config => {
//Put code that depends on valid config here
};
}
答案 1 :(得分:0)
//我可以确定在这个位置初始化this.config 数据库?
没有
如果我不能假设它,如何达到这个效果?请记住我的代码。
实现这一目标的几种方法。您可以使用'解决'或者您可以为所有州定义抽象父状态,并具有模板:
<ui-view ng-if="configLoaded"></ui-view>
然后在子状态中,您可以确定配置请求已完成。