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