RxJS субъекты могут выступать в качестве генераторов событий общего назначения.Шаблон Singleton естественным образом обрабатывается модулями JS, поскольку они оцениваются только один раз и, следовательно, не относятся к реализации класса генератора событий.
Вот как это делается в RxJS 6:
import { Subject } from 'rxjs';
import { filter } from 'rxjs/operators';
export const filterEvent = event => filter(e => e.event === event);
export default new Subject();
import emitter, { filterEvent } from './emitter';
emitter
.pipe(filterEvent('foo'))
// or
// .pipe(filter(({ event }) => event === 'foo')))
.subscribe(e => {
console.log(e.data)
});
emitter.next({ event: 'foo', data: {...} });
RxJS Subject
используется в Угловой EventEmitter
реализации .
Существует несколько классов предметов, которые имеют свои отличительные черты и могут быть предпочтительными в некоторых случаях.
Subject
класс может быть расширен, чтобы обеспечить синтаксический сахар для pipe(filter(...))
подпрограммы при необходимости.