rxjs6 «share ()» не работает с «of (...)»? - PullRequest
0 голосов
/ 31 августа 2018

Почему наблюдаемый, созданный с помощью of(...), не делит источник среди нескольких подписчиков? timer(...) и Observable.create(...) работают как положено. Я не нашел упоминаний об этом в документации.

https://stackblitz.com/edit/typescript-cygjdt?file=index.ts&devtoolsheight=100

1 Ответ

0 голосов
/ 31 августа 2018

Работает, но синхронно, в вашем примере:

// of
const ofSource = of('hi');
const ofExample = ofSource.pipe(
  tap(() => console.log('***SIDE EFFECT - OF***'))
);

const ofSharedExample = ofExample.pipe(share());

ofSharedExample.subscribe(() => console.log('of sub 1'));
ofSharedExample.subscribe(() => console.log('of sub 2'));

Первая подписка завершена до подписки второй. Таким образом, share откажется от подписки на базовое наблюдаемое, потому что нет других подписчиков на поделиться наблюдаемым с.

Если вы добавите observeOn(asyncScheduler) (или какое-либо другое асинхронное поведение), вы «задержите» подписку и получите общий of.

https://stackblitz.com/edit/typescript-xcwyew?file=index.ts

...