这是我的代码:
this.getDictionaryById(0).subscribe((dictionaries:Array<IDictionary>)=>{
for(let i:number = 0; i < dictionaries.length; i++){
let dictionary:IDictionary = dictionaries[i];
this.getDictionaryById(dictionary.DictionariesID).subscribe((dict:Array<IDictionary>)=>{
this._allDictionaries[dictionary.ValueText] = dict;
observer.next(this._allDictionaries);
});
}
});
它可以工作,但是视图刷新次数过多。
如何更好地解决此问题?
答案 0 :(得分:0)
看起来您最终要返回第二个Observable的结果。但是第二个Observable
的值取决于第一个Observable
。
因此,在这种情况下,您可以将switchMap
与forkJoin
一起使用
在这里,尝试使用switchMap
return this.getDictionaryById(0)
.pipe(
switchMap((dictionaries: Array<IDictionary>) => {
return forkJoin(
...dictionaries.map((dictionary, index) => {
return this.getDictionaryById(dictionary.DictionariesID)
.pipe(
switchMap(dict => {
return {
...dictionary,
ValueText: dict,
}
})
)
})
);
})
);
我还没有测试过这个,因为我没有getDictionaryById
实现。但我认为应该可以。