首页 > 解决方案 > 如何处理具有严重可观察属性的可观察对象?

问题描述

我有一个可观察的对象。当我订阅时,已将其他属性(定义为可观察的)添加到对象中。

const obj = {
  a: 'some text'
};
const b$ = of('BBB').pipe(delay(1000));
const c$ = of('CCC');

const obj$ = of(obj).pipe(delay(100));

const res$ = obj$.pipe(
  map(obj => Object.assign({
    b: b$,
    c: c$
  }, obj))
)

const subscribe = res$.subscribe(val => console.log(val));

输出仍然包含 observables:

{a: "some text", b: Observable, c: Observable}

但预期的输出应该是:

{a: "some text", b: "BBB", c: "CCC"}

我该如何解决这个问题?这是 StackBlitz:https ://stackblitz.com/edit/typescript-6euwct

标签: angularrxjs

解决方案


combineLatest会带你到那里。

combineLatest(b$, c$, obj$)
  .pipe(
    map(([b, c, obj]: any) => ({
      b,
      c, 
      obj
    })),
  )
  .subscribe(console.log);

任何时候它们中的任何一个发出一个值,您的最​​终订阅都会触发,例如这样做:

const c$ = interval(1000).pipe(map( () => of('CCC')));

会每秒重新发射一次。或者只是间隔(1000)每秒都会改变 C 的值。


推荐阅读