【发布时间】:2017-02-09 06:05:25
【问题描述】:
我有这段代码 sn-p 进行一些数据处理并返回一个数组。
choose(n?: number): Observable<PickQuality[]> {
this.championService.getChampions()
.subscribe(champions => {
if(this.options.length == 0)
champions.forEach(champion =>
this.options.push(new PickQuality(champion, 0)));
// Some computing happens, chosen variable is defined here
this.chosenObserver.next(chosen);
});
let obs = new Observable<PickQuality[]>((observer => this.chosenObserver = observer));
return obs;
}
问题是每次选择()运行时我都必须从我的服务调用 getChampions(),因为我需要异步上下文来调用我的观察者的 next()。 if 子句解决了内容的复制,但我仍然对我的服务进行过多调用。我怎样才能使服务只被调用一次,然后我从对象本身检索数据?
PS:我不得不这样构建它,因为它依赖于来自服务的异步内容。在构造函数或 ngOnInit() 上填充我的“this.options”属性将不起作用,因为首先会发生 choose() 调用,所以我必须在选择函数() 中填充数组。
【问题讨论】:
-
什么叫'choose()'?不管是什么,这绝对不会发生在构造函数之前!通常这样的异步调用应该进入 ngOnInit() 并且从你的解释中不清楚它为什么会失败。
-
我有一个调用“choose()”的组件。我试过使用 console.log 来找出每个被调用的时间。即使构造函数首先运行,我也不能保证 getChampions() 结果可用于 choose() 函数。
-
如果我在 ngOnInit() 上运行异步调用,如何确保调用选择时内容可用?
标签: angular reactive-programming angular2-observables