Можно ли превратить простой предмет в поведение субъекта? - PullRequest
0 голосов
/ 10 мая 2019

У меня простой, но сложный вопрос, связанный с RxJS. Предположим, я хочу подписаться на тему, предлагаемую библиотекой, которую я не могу изменить, но я хочу, чтобы эта подписка велась так, как если бы я подписался на BehaviorSubject. Возможно ли сделать что-то вроде:

let plainSubject: Subject<string> = someLibrary.getSubject();
let behaviorSubject: BehaviorSubject<string> = BehaviorSubject.from(plainSubject);
let subscription = behaviorSubject.subscribe(() => foo());

Извините, если этот вопрос не имеет никакого смысла, мои знания по RxJS все еще довольно просты. Я даже не уверен, возможно ли это, поскольку я не нашел никаких признаков того, что это Google или нет.

Заранее спасибо!

Джошуа

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вы можете:

let behaviorSubject = new BehaviorSubject();
someLibrary.getSubject().subscribe(behaviorSubject);
behaviorSubject.subscribe(() => foo());
0 голосов
/ 10 мая 2019

Поскольку потоки неизменны, вы можете «сменить» тему на поведение.

Но вы полностью можете смоделировать один или создать его из него:

const BS1$ = someLibrary.getSubject().pipe(
  startWith(undefined),
);

const BS2$ = new BehaviorSubject(undefined).pipe(
  switchMap(v => someLibrary.getSubject())
);

startWith заставляет поток начинаться с заданного значения, switchMap меняет значение исходного потока наодин предоставлен.

Они оба из 'rxjs/operators'.

Выбери свое оружие!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...