RxJS学习笔记(二)创建类操作符 #69
zhangyu1818
announced in
zh-cn
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
操作符
简单来讲,操作符就是解决某个具体应用问题的模式,在针对不同问题时,需要使用不同的操作符,如合并、过滤、异常捕获等
我的理解就是,如果把一个
Observalbe
比做一个数组,那么操作符就是数组的方法,可以使用map
、filter
、forEach
来对这个数组进行操作操作符大致分为以下几类
创建类
如果使用
new Observable
这样的方式来创建,定制性很高,如果只是使用一些简单的数据来创建Observable
,那么RxJS
中提供了专门用来创建Observable
的操作符部分操作符接受一个可选参数
**scheduler**
,不过我暂时没有学习,所以先忽略掉of
of
操作符可以指定固定的数据来创建Observable
对象range
of
是指定数据,range
则是指定一个范围range
函数接受 2 个可选参数,第一个参数为起始值,默认值为 0,第二个参数为个数,默认值为undefined
后续的每一个数都会加 1,向上述例子,从 5 开始,每次加 1,知道个数达到 10 个,也就是到达数字 14 时结束
generate
range
可以连续的创建数字,如果想要每次输出相隔两个数字呢?generate
就像是RxJS
中的for
循环generate
可接受 4 个参数,第一个参数为初始值,第二个参数为判断条件,第三个参数为值的递增,第四个参数可以是结果的处理函数增加第四个参数后,输入会根据处理函数的返回值
相较于
for
循环来看,RxJS
中的generate
更纯了,函数式,比如for
循环,每次都会对条件变量做处理,所以不能用const
repeat
repeat
可以对上游的数据进行重复的输出,如果想要一个1,2,3,1,2,3,1,2,3
的数据,用of
当然是可以做,但是用repeat
更加清晰重复 3 次
of(1,2,3)
的数据,这里调用了一个函数叫pipe
,在RxJS v5
中,这里的调用方式应该是of(1, 2, 3).repeat(3)
就是链式操作,但在
RxJS v6
中,需要使用pipe
操作符来,pipe
就是一个管道,数据从管道进入,进过处理,再从管道出去EMPTY、NEVER、throwError
EMPTY
是直接返回一个完成的Observable
,会直接调用观察者的completed
函数NEVER
则是返回一个永不完结的Observable
,不会调用观察者的任何函数throwError
是抛出一个错误,如果观察者有error
函数则调用,否则抛出一个错误interval 和 timer
上面的操作符,都是产生同步数据的,最简单的产生异步数据的方法就是
interval
和timer
,从名字可以看出,它们的功能和setInterval
和setTimeout
类似interval
interval可接受1个参数,如上每隔
1000ms`输出依次,从 0 开始,每次加 11 秒后输出 0,再一秒后输出 1,再一秒后输出 2...永不完结
timer
timer
可接受 2 个参数,不同的是第一个参数可以为数字,也可以为Date
对象,如果是数字,则代表毫秒,等待相应时间后输出 0上例中,一秒后输出 0,完结
第二个参数则是周期,如果有第二个参数,
timer
也能用不完结这样的效果就和
interval
一样了from
from
可以把一个像Observable
的参数,转为真正的Observable
对象一个数组像
Observable
,一个伪数组对象也像,字符串也像,Promise
也,都可以通过from
转为真正的Observable
对象数组
伪数组
字符串
Promise
这里的
Promise
是resolve
的,如果是reject
,则会触发抛出错误或调用观察者的error
函数fromEvent
fromEvent
可以把网页中的DOM
事件转化为Observalbe
对象fromEvent
可以接受 3 个参数,第一个参数为事件的DOM
对象,第二个参数为事件的名称,第三个参数是EventListenerOptions
如这个事件因为传入了第三个参数,只会触发一次
repeatWhen
repeat
能够重复订阅上游的Observable
,但是不能控制订阅时间,如等待 2 秒再重新订阅repeatWhen
就可以满足上面的需求当上游
Observable
completed
的时候,会传给repeatWhen
一个notifications
参数,这个参数也是Observable
对象defer
defer
可以只在观察中订阅的时候才创建Observable
对象,通常用于Observable
工厂函数刷新页面后,可能输出
MouseEvent
,也可能输出interval
的数字Beta Was this translation helpful? Give feedback.
All reactions