【问题标题】:How extract an observable from an observable with a pipe method?如何使用管道方法从可观察对象中提取可观察对象?
【发布时间】:2018-02-14 20:39:55
【问题描述】:

如何在管道方法中提取 observable 的结果?我有以下内容:

// type of "observables" is Observable<Observable<MyType>[]>
const observables = this.http.get<MyTypeList>(rootUrl).pipe(
  map(list => list[locale]), 
  map(urlList => urlList.map(url => this.http.get<MyType>(url))),
  // I need some method here to make Observable<MyType>[] from Observable<Observable<MyType>[]>
);

forkJoin(observables).subscribe(/* I have all my items here*/)

在第二次map 调用之后,我需要一些方法来从Observable&lt;Observable&lt;MyType&gt;[]&gt; 生成Observable&lt;MyType&gt;[] 有没有一种优雅的方法可以做到这一点?

【问题讨论】:

  • 如果将第二个 map() 替换为 mergeMap() 会怎样?
  • 它删除了数组而不是外部可观察对象:Observable&lt;Observable&lt;MyType&gt;&gt;
  • 在第二个map之后添加concatAll()mergeAll()concatMap(a =&gt; a)mergeMap(a =&gt; a)
  • 这将导致Observable&lt;MyType&gt;,但我需要Observable&lt;MyType&gt;[]
  • 你想要 Observables 数组?

标签: angular typescript rxjs


【解决方案1】:

问题是我尝试在外部使用 forkJoin,我想我可以在内部使用它,并使用建议的 mergeMap

const obs = this.http
  .get<MyTypeList>(rootUrl)
  .pipe(
    map(list => list[locale]), 
    mergeMap(urlList =>
      forkJoin(
        urlList.packages.map(url => this.http.get<MyType>(url))
      )
    )
  );

obs.subscribe(/* I have all my items here*/);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多