Rxjs学习笔记三

合并类操作符

  • concat:首尾相连

类似于数组中的concat方法:1,从第一个Observable对象获取数据,把数据传给下游;2,当第一个Observable对象complete之后,concat就会去subscribe第二个Observable对象获取数据,把数据同样传给下游; 3, 以此类推,知道最后一个Observable完结之后,concat产生的Observable也就完结了

var a=Rx.Observable.of(1,2)

var b=Rx.Observable.of(3,4)

a.concat(b).subscribe(x=>console.log(x))

//1,2,3,4

因为concat开始从下一个Observable对象抽取数据只能在前一个Observable对象完结后,所以参与到这个concat之中的对象应该都能完结。

  • merge:先到先得快速通过

1,数据汇流

var a=Rx.Observable.timer(0,1000).map(x=>x+'A')
var b=Rx.Observable.timer(500,1000).map(x=>x+'B')

// 0A,0B,1A,1B,2A,2B,3A,3B....

2, merge的应用场景

我们知道fromEvent可以从网页中获取事件,但是fromEvent一次稚嫩供一个DOM元素中获取一种类型的事件,比如,我们关心某个元素的click事件,同时也关心这个元素上的touchend事件,这个时候就要借助merge的力量了

const click$=Rx.Observable.fromEvent(element,"click")
const touch$=Rx.Observable.fromEvent(element,"touchend")
Rx.Observable.merge(click$,touch$).subscribe(eventHandler)
  • zip:拉链式组合

1, 一对一合并

在产生数据的形式上,zip和concat,merge很不同,concat,merge会保留原有的数据传给下游,但是zip会把上游的数据转化为数组形式,每一个上游Observable贡献的数据会在对应数组中占一席之地

在zip执行的时候,他会立刻订阅所有的上游Observable,然后开始合并数据

var a=Rx.Observable.of(1,2,3)
var b=Rx.Observable.of(4,5,6)
Rx.Observable.zip(a,b).subscribe(x=>console.log(x))

//[1,4],[2,5],[3,6]

var a=Rx.Observable.of(3)
var b=Rx.Observable.of(6)

Rx.Observable.zip(a,b).subscribe(([a,b])=>console.log(a+"--"+b))
//  3--6

2, 多个数据流

多个数据流的时候,吐出数据最少的上游Observable决定了zip产生的数据个数

  • combineLast:合并最后一个数据
var a=Rx.Observable.timer(500,1000)
var b=Rx.Observable.of("a")
Rx.Observable.combineLatest(a,b).subscribe(x=>console.log(x))

//[1,"a"],[1,"a"],[2,"a"]......无限次数
  • race:胜者通吃

​​​​​​​多个Observable对象在一起,看谁先产生数据,第一个吐出数据的Observable就是胜者,其余输入的Observable对象则会被退订而抛弃

  • forkJoin

​​​​​​​接受多个Observable对象作为参数,forkJoin产生的Observable对象只会产生一个数据,因为他会等待所有参数Observable对象的最后一个数据,所以说,forkjoin就是RXJS界的Promise.all,Promise.等待所有输入的Promise对象合并之后把结果合并

var a=Rx.Observable.interval(1000).map(x=>x+'a').take(1)
var b=Rx.Observable.interval(1000).map(x=>x+"b").take(3)
Rx.Observable.forkJoin(a,b).subscribe(x=>console.log(x))

// ["0a", "2b"]

 

本书的内容 本书以线性⽅式来介绍RxJS,所以建议读者以顺序的⽅式来阅读本 书,如果读者觉得对某⼀个⽅⾯已经⼗分了解,也可以跳过相关章节,不 过,还是希望读者在时间允许的情况下阅读全部内容,你肯定会有新的体 会。本书包含15章,章节的内容如下分布。 第1章 函数响应式编程。这⼀章⽤⼀些例⼦展⽰RxJS体现的编程风 格,引出两个重要的概念:函数式编程和响应式编程,使⽤RxJS的开发者 必须先理解这两种风格。 第2章 RxJS⼊门。这⼀章介绍软件项⽬中导⼊RxJS的⽅法,RxJS中 的基本概念,包括数据流、操作符和观察者模式。 第3章 操作符基础。使⽤RxJS很⼤程度上就是在使⽤操作符,这⼀ 章会介绍RxJS中操作符的实现原理。 第4章 创建数据流。这⼀章介绍RxJS中创建数据流的不同⽅法,包 括RxJS提供的主要创建类操作符的使⽤⽅法。 第5章 合并数据流。这⼀章介绍如何合并多个数据流,包括合并类操 作符的使⽤⽅法详解。 第6章 辅助类操作符。这⼀章介绍不是很起眼却很重要的两类操作 符,数学类和布尔条件类操作符。 第7章 过滤数据流。这⼀章介绍如何让流过数据管道的数据根据规则 筛选掉⼀部分,在这⼀章还会介绍⽤筛选法进⾏回压控制的⽅法。 第8章 转化数据流。这⼀章介绍对流经数据管道的数据进⾏格式转化 的⽅法,包括RxJS提供的各种转化类操作符的⽤法。 第9章 异常错误处理。这⼀章介绍数据流中产⽣的异常的处理⽅法, 包括如何捕获异常和实现重试。 第10章 多播。这⼀章介绍如何让⼀个数据源的内容被多个观察者接 收,包括Subject的使⽤⽅法和RxJS对各种多播场景的⽀持。 第11章 掌握时间的Scheduler。这⼀章介绍RxJS中Scheduler的概念。 第12章 RxJS的调试和测试。介绍RxJS应⽤的调试和单元测试⽅法, 深⼊介绍如何利⽤RxJS写出⾼可测试性的代码。 第13章 ⽤RxJS驱动React。这⼀章介绍RxJS和React结合的⽅法。 第14章 Redux和RxJS结合。这⼀章介绍Redux和RxJS的组合⽅式,包 括如何⽤RxJS实现Redux的功能,如何⽤Redux-Observable来发挥两者的共 同的优势。 第15章 RxJS游戏开发。这⼀章介绍⽤RxJS实现⼀款游戏breakout的 完整过程,综合了全书介绍的所有RxJS知识点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值