首页 > 解决方案 > 将包含带有 Observables 对象的数组的对象转换为 Observable

问题描述

假设我有这个对象:

const myObject = {
    a: 'foo',
    b: 'bar',
    obs: [{ c: 'foobar', d: of(true) }, { c: 'foobar', d: of(true) }]
}

我怎样才能以类似的方式返回myObject一个Observable<MyObject>简单forkJoin()的已解析 Observables 数组。

目标是:

myObject.subscribe((ob) => console.log(ob));

并收到:

{
    a: 'foo',
    b: 'bar',
    obs: [{ c: 'foobar', d: true }, { c: 'foobar', d: true }]
}

换句话说,我只想订阅一次,myObject而不是myObject单独订阅每个 Observable 内部。

感谢您的任何建议!

标签: typescriptrxjsobservable

解决方案


最终,forkJoin基本上就是你所需要的。之后您可以使用地图创建更新的对象。

这可能看起来像这样:

const myObject = {
  a: 'foo',
  b: 'bar',
  obs: [{ c: 'foobar', d: of(true) }, { c: 'foobar', d: of(true) }]
}

forkJoin(
  myObject.obs.map(oby => oby.d)
).pipe(
  map(obsRes => ({
    ...myObject,
    obs: myObject.obs.map((oby, i) => ({
      ...oby, 
      d: obsRes[i]
    }))
  }))
).subscribe(console.log);

推荐阅读