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))
    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.背景介绍 Rx(Reactive Extension -- 响应式扩展 http://reactivex.io...
    爱上Shu的小刺猬阅读 6,263评论 1 3
  • 发现 关注 消息 RxSwift入坑解读-你所需要知道的各种概念 沸沸腾关注 2016.11.27 19:11*字...
    枫叶1234阅读 7,809评论 0 2
  • title: RxJS简介date: 2017-08-01 09:45:33tags: [JavaScript, ...
    color_cat阅读 2,481评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • ♥♡♡每个周末,苏沫都会给妈妈打一个长途电话,和她絮絮叨叨说上半小时至一小时,当然,告诉妈妈的,都是挑拣出来开心的...
    月影寒阅读 3,118评论 0 1