Rxjs的操作符下篇

Rxjs的操作符下篇

分组操作符

  • buffer

    buffer(breakObservable) 参数签名

    let breakWhen$ = Rx.Observable.timer(1000);
    
    let stream$ = Rx.Observable.interval(200).buffer(breakWhen$);
    
    stream$.subscribe(value => console.log(value));
    // source会缓存所有的值,直到所有的值缓存一次输出 0,1,2,3,4
    

    Buffer意味着我们在等待而不会发出任何值,直到breakObervable发生。

  • bufferTime

    基本和buffer的作用是一样的除了参数不一样,buffer传入的参数是BreakObservable。然而bufferTime则是以时间作为参数,作为缓存的触发时机。

高级参数

  • Subject

    Subject是一个比较特殊的,它即拥有Observer Observable的行为。

    所以Subject即可以订阅数据,也可以发送数据

    发送值

    subject.next(1);
    subject.next(2);
    

    订阅值

    const subscription = subject.subscribe( (value) => console.log(value) )
    

    Subject的对象拥有以下的方法

    1. next
    2. error
    3. complete
    4. subscribe
    5. Unsubcribe

    通常我们将Subject用来作为代理来使用

    let source$ = Rx.Observable.interval(500).take(3);
    const proxySubject = new Rx.Subject();
    let subscriber = source$.subscribe( proxySubject );
    
    proxySubject.subscribe( (value) => console.log('proxy subscriber', value ) );
    
    proxySubject.next( 3 );
    

    存在一个陷阱: proxySubject在没有被订阅前 所有调用的next方法都是无效的,在订阅之后的值将优先发出。

  • ReplaySubject

    ReplaySubject的值与Subject唯一不同在于,subject在没有被订阅前所有的next方法都是无效的,但是replaySubject其实有一个可以设置的缓冲区间。

    let replaySubject = new Rx.ReplaySubject(2);
    replaySubject.next(1);
    replaySubject.next(2);
    replaySubject.next(3);
    
    replaySubject.subscribe(value => console.log(value))
    

你可能感兴趣的:(Rxjs的操作符下篇)