• Rxjs的常用概念


    1. Rxjs的基本概念

    Observable
    Observer
    Subscription
    Subject
    Operators

    Observer 就是实现该接口的一种对象
    interface Observer<T> {
        void onCompleted();
        void onError(java.lang.Throwable e);
        void onNext(T t);
    }
    支持next和completed,类似于Promise

    2. Rxjs Observable的创建
    create
    fromPromise
    fromEvent
    from
    of
    interval
    range
    操作符按照功能分类,大概有以下几个内容:

    创建,即创建 Observable 的操作符,如 from、of、interval
    转换 如 map、pluck
    过滤 如 filter、last、take、throttle、debounce
    合并 如 concat、merge、zip
    多播 如 multicast
    错误处理 如 catch、retry
    辅助工具 如 do
    条件分支 如 every、find、isEmpty
    数学 如 count、max、min、reduce
     
    3.Rxjs PublishSubject,ReplaySubject,BehaviorSubject,AsyncSubject
     
    PublishSubject 正常发布订阅
    ReplaySubject 缓存所有数据,每次新订阅可接收所有数据

    ReplaySubject.createWithSize 限制缓存多少个数据;
    ReplaySubject.createWithTime 限制一个数据可以在缓存中保留多长时间
    ReplaySubject.createWithTimeAndSize 则可以同时限制时间和个数

    BehaviorSubject 只保留最后一个值, 立即发出
    AsyncSubject 只保留最后一个值, 只在调用complete时
     
    4. Rxjs switchMap, mergeMap, concatMap, exhaustMap
     
    concatMap: 串行执行, 前一个完成,才开始后一个
    mergeMap: 并行执行
    switchMap: 顺序执行, 后一个开始,会取消前一个,适用的场景较多 (在取消之前, 前一个执行较快, 也会有订阅输出, 不同于ajax的abort)
    exhaustMap: 顺序执行, 前一个执行期间, 后一个发出会被丢弃, 直到前一个执行完成, 停止丢弃,开始接收新的

    switchMap例子:
    完整的拖曳事件
    Rx.Observable.fromEvent(document, ‘mousedown’)
      .map(e => e.target)
      .switchMap(target => Rx.Observable.fromEvent(document, ‘mousemove’).map(e => {
      return { 
        startX: target.offsetX, 
        startY: target.offsetY,
        moveX: e.pageX,
        moveY: e.pageY,
      }
    }))
    .subscribe(pos => console.log(pos))
    switchMap里面的函数接收mousedown这个流给的target,然后再返回一个新的关于mousemove的流,并且对这个新的流作map处理,过程中把前面的target也用上了。在switch发生的时候,mousedown的事件监听就给丢掉了。后面就全是跟mousemove相关的监听。
     
     
    出处: https://juejin.cn/post/6861514628132765710
    出处: https://www.bilibili.com/read/cv13462830
    出处: https://blog.csdn.net/kongbaidepao/article/details/51240456
    出处: https://blog.csdn.net/qq_26025363/article/details/100009556
    出处: https://www.tangshuang.net/6105.html

  • 相关阅读:
    Eclipse上安装Activiti插件
    Java之Map的使用场景
    Java之Set的使用场景
    Java之List使用场景
    Java重写toString和泛型的使用
    Java学习之静态代码块
    Java学习之StringBuffer
    Java学习之基本数据类型和引用数据类型区别
    Java学习之String
    Java基础整理之字节、数组、字符串、面向对象
  • 原文地址:https://www.cnblogs.com/mengff/p/15952140.html
Copyright © 2020-2023  润新知