Оператор Rxjs не дает ожидаемых результатов - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь, чтобы доля оператора rxjs работала как в https://www.learnrxjs.io/operators/multicasting/share.html,, но я не получаю ожидаемых результатов.Я ожидал, что «Функция выполнения карты» будет регистрироваться только один раз.Я что-то упустил?

const { of } = rxjs;
const { map, share } = rxjs.operators;

const obs$ = of('data');

const mapped$ = obs$.pipe(map(d => {
  console.log('Running map function');
  return `mapped ${d}`;
}));

const shared$ = mapped$.pipe(share());

shared$.subscribe(d => { console.log(d); });

shared$.subscribe(d => { console.log(d); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>

1 Ответ

0 голосов
/ 01 октября 2018

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

const { of, Observable, asyncScheduler } = rxjs;
const { map, share, observeOn } = rxjs.operators;

const obs$ = of('data').pipe(observeOn(asyncScheduler));

const mapped$ = obs$.pipe(map(d => {
  console.log('Running map function');
  return `mapped ${d}`;
}));

const shared$ = mapped$.pipe(share());

shared$.subscribe(d => { console.log(d); });

shared$.subscribe(d => { console.log(d); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>
...