Как правильно использовать оператор share ()? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть поток, который запускается next() методом Rx BehaviorSubject. Как я могу поделиться потоком pipedData$ между подписчиками?

Я пытался использовать оператор share здесь, чтобы избежать тяжелых пересчетов внутри оператора map, но не повезло - каждый подписчик производит пересчеты.

вот стеклиц для этой проблемы

Также возможно ли получить количество подписчиков из источника?

import { interval, BehaviorSubject } from 'rxjs';
import { take, map, tap, share, debounceTime } from 'rxjs/operators';

const data$ = new BehaviorSubject(null);

interval(1000).pipe(
  tap(x => console.log('emit:')),
  take(3)
).subscribe((x)=>{
  data$.next(x)
});

const pipedData$ = data$.pipe(
  debounceTime(30),
  share(),
  map(x => Math.random()),
);

console.log("--=-=-=-=--=-=----=-=-=-=-==-")
pipedData$.subscribe(x => console.log(x));
pipedData$.subscribe(x => console.log(x));
pipedData$.subscribe(x => console.log(x));

1 Ответ

2 голосов
/ 08 апреля 2020

Похоже, вам нужно переместиться на share ниже map, чтобы получить желаемое поведение.

...