MaybeSubject:对内部可观察的对象有条件地应用shareReplay()

时间:2020-03-10 08:24:59

标签: typescript rxjs

我正在尝试创建类似条件的BehaviorSubject,其持久状态取决于消息-有些消息应保留在队列中,有些则不应保留。

此代码也应打印Fire N1。

import { filter, map, publish, shareReplay, switchMap, share, multicast } from 'rxjs/operators';
import { Observable, Subject, Subscription, iif, of, ConnectableObservable, ReplaySubject } from 'rxjs';


export interface IMessage {
  message: string;
  retain: boolean;
}

 const messageGenerator = new Subject<IMessage>();

 const observer = messageGenerator.asObservable().pipe(
   switchMap(m => iif(() => m.retain, of(m).pipe(shareReplay(1)), of(m))),   
   publish()
) as ConnectableObservable<IMessage>;

observer.connect();

// should go for subscriber 1
messageGenerator.next({message: 'Fire N1', retain: true});

observer.subscribe(ev => console.log('Subscriber 1: Received!', ev.message));

// should go for subscriber 1
messageGenerator.next({message: 'Fire N2', retain: false});

observer.subscribe(ev => console.log('Subscriber 2: Received!', ev.message));

// should go for subscribers 1 & 2
messageGenerator.next({message: 'Fire N3', retain: false});

0 个答案:

没有答案