Как сохранить «завершенное» событие для двух наблюдаемых RxJS? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть наблюдаемая const numbers = from([1,2,3]), которая испустит 1, 2, 3, затем завершится.

Мне нужно сопоставить это с другой наблюдаемой, например, такой как

 const mapped = numbers.pipe(
   concatMap(number => Observable.create(observer => {
     observer.next(number);
   }))
 );

Но сейчасрезультирующая наблюдаемая mapped испускает 1, 2, 3, но не завершенное событие.

Как сохранить полное событие в mapped?

1 Ответ

0 голосов
/ 21 февраля 2019

Ваш код дает мне просто "1" (с RxJS 6);Вы уверены, что видите 3 значения?

Rx.from([1,2,3]).pipe(
   op.concatMap(number => Rx.Observable.create(observer => {
     observer.next(number);
   }))
 ).forEach(x => console.log(x)).then(() => console.log('done'))

Вы никогда не завершаете созданное Observable (оно выдает одно значение, но никогда не вызывает observer.complete()).Это работает:

Rx.from([1,2,3]).pipe(
   op.concatMap(number => Rx.Observable.create(observer => {
     observer.next(number); observer.complete();
   }))
 ).forEach(x => console.log(x)).then(() => console.log('done'))

Все это показывает, как трудно правильно использовать Rx.Observable.create().Смысл использования Rx заключается в написании вашего кода с использованием высокоуровневых абстракций.Большая часть этого предпочитает использовать операторы вместо наблюдателей.Например, в вашем случае (что, по общему признанию, просто):

Rx.from([1,2,3])
  .pipe(op.concatMap(number => Rx.of(number)))
  .forEach(x => console.log(x)).then(() => console.log('done'))
...