rxjs中的时间操作符:interval和timer,定时器和延时器。
interval 定时器
基于给定时间间隔发出数字序列。返回一个发出无限自增的序列整数,可以选择固定的时间间隔进行发送。第一次并没有立马发送,而是第一个时间段之后才发出。默认情况下是采用async
调度器来提供时间概念,但也可以给它传递任意调度器。
api:
public static interval(period: number, scheduler: Scheduler): Observable
参数:
- period number 可选,默认值为0,时间间隔,单位为毫秒(或者是调度器的内部时钟决定的时间单位)
- scheduler Scheduler 可选,默认为async,调度器,用来提供时间的概念
例如:
1 | import {interval} from 'rxjs'; |
timer 延时器
创建一个Observable,该Observable在初始延时之后开始发送并且在每个时间周期后发出自增的数字。
就像是
interval
,但是你可以指定什么时候开始发送。
例如:
1 | import {timer} from 'rxjs'; |
api:
public static timer(initialDelay: number | Date, period: number, scheduler: Scheduler): Observable
参数:
- initialDelay number|Date 延时的时间(日期)
- period number (可选)时间周期,毫秒为单位
- schedule Scheduler 调度方式,默认为async。
timer返回一个发出无限自增数列的observable
,具有一定的时间间隔,这个间隔可以是提供的毫秒,也可以是某个Date
类型的时间,当延时到某个时间(某个日期)的时候开始发出值。默认情况下使用async
调度器来提供时间的概念,但是也可以传递任何调度器。如果时间周期没有被指定,输出observable
只发出0,否则会发出一个无限数列。
调度器,用来调度值的发送,提供“时间”的概念。默认为“async”
如何取消监听?
RxJS两个最重要的概念:Observable
和Observer
,Observable
就是”可以被观察的对象“即”可被观察者,而Observer
就是”观察者“,链接两者的桥梁就是Observerable对象的函数subscribe
。
我们给上面timer的用法添加一个变量:
1 | const timer$: Observable<number> = timer(3000, 1000); |
这样,我们可以明确的看到,使用操作符timer
创建了一个Observable
可观察对象,然后我们使用Observable
的subscribe
方法来创建一个观察者Subscription
对象,现在,我们可以通过调用观察者的unsubscribe
方法来释放一个资源:
1 | const timerSub: Subscription = this.timer$.subscribe(number => { |
也就是说,当运行第十次后,就取消监听。
Subscription类型表示可清理的资源,比如Observable的执行。Subscripiton有一个重要的方法:unsubscribe.该方法不接受任何参数,并且清理该Subscription持有的资源。另外,Subscriptions可以通过
add()
方法进行分组,即给当前Subscription添加子Subscription。当Subscription取消订阅时,它所有的子孙Subscription都会被取消订阅。
完~