订户内部的订户,等待秒数结果

时间:2019-07-15 21:43:10

标签: angular typescript rxjs observable angular-observable

这是我的代码:

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);
    });
  }
});

它可以工作,但是视图刷新次数过多。

如何更好地解决此问题?

1 个答案:

答案 0 :(得分:0)

看起来您最终要返回第二个Observable的结果。但是第二个Observable的值取决于第一个Observable

因此,在这种情况下,您可以将switchMapforkJoin一起使用

在这里,尝试使用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实现。但我认为应该可以。