美文网首页
RxJava 反应式编程阅读笔记2 操作符 merge 和 zi

RxJava 反应式编程阅读笔记2 操作符 merge 和 zi

作者: jkwen | 来源:发表于2021-06-22 23:45 被阅读0次

    merge

    表示将多个事件流合并处理,用来获取最终所有事件的并集。


    merge 的弹珠图-来源 RxJava 反应式编程.png

    也就是说,如果想要多个事件同时发送,但又不关心谁先谁后,只想要最后的一个合并结果,就可以用 merge 实现。就像弹珠图描述的那样事件会合并,但当遇到错误异常时就会被终止。

    想要即使遇到问题也能继续进行,直到结束后才抛出异常则可以用 mergeDelayError 操作符。

    如果仅有两个事件流,可以用 mergeWith 来代替 merge,两者等效。

    zip

    表示将多个事件流组合起来,同样也是获取合并后的结果,但这更像是逻辑上的合并,而 merge 仅是物理上的组合。所以建议用 merge 时,事件类型最好相同。


    zip 的弹珠图-来源 RxJava 反应式编程.png

    不过使用 zip 要注意的是,事件流之间最好能有一个固定频率,以确保事件与事件之间同步组合,避免事件之间相互等待,否则随着时间长度的拉大,会有内存泄漏,过期数据等问题存在。

    同 mergeWith 类型,zipWith 用于两个事件流的组合。

    前面说用 zip 时最好确保事件流之间的同步,如果不同步则可以用以下几种操作符,
    combineLatest 当任意一个上游事件产生,就使用另外流的最新已知事件来进行组合。

    combineLatest 的弹珠图-来源 RxJava 反应式编程.png
    withLatestFrom 不像 combineLatest,它会区分谁是主事件流,其他就是辅助事件流,只有主事件流有新事件产生,才会组合其他事件。
    amb 这个其实都有点偏离组合的本质了,它会从多个事件流中选取最先产生事件的事件流并继续跟踪,其他事件流则直接丢弃。
    amb 的弹珠图-来源 RxJava 反应式编程.png

    相关文章

      网友评论

          本文标题:RxJava 反应式编程阅读笔记2 操作符 merge 和 zi

          本文链接:https://www.haomeiwen.com/subject/volvyltx.html