Как обращаться с наблюдаемым объектом с суровыми наблюдаемыми свойствами? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть наблюдаемый объект.Дополнительные свойства, определенные как наблюдаемые, были добавлены к объекту при подписке.

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

Вывод все еще содержит наблюдаемые:

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

Но ожидаемый вывод должен быть:

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

Как я могу решить эту проблему?Вот StackBlitz: https://stackblitz.com/edit/typescript-6euwct

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Если вы хотите подождать, пока все наблюдаемые не будут завершены, вы можете попробовать forkJoin.

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$ = forkJoin(
  obj$,
  b$,
  c$
).pipe(map(([obj, b, c]: any) => ({ obj, b, c })))

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

Это подождет, пока не будет завершена каждая из этих наблюдаемых, прежде чем запускать блок подписки.

0 голосов
/ 19 декабря 2018

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 каждую секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...