0%

RxJS操作符timer、interval

rxjs中的时间操作符:interval和timer,定时器和延时器。

interval 定时器

基于给定时间间隔发出数字序列。返回一个发出无限自增的序列整数,可以选择固定的时间间隔进行发送。第一次并没有立马发送,而是第一个时间段之后才发出。默认情况下是采用async调度器来提供时间概念,但也可以给它传递任意调度器。

api:

public static interval(period: number, scheduler: Scheduler): Observable

参数:

  • period number 可选,默认值为0,时间间隔,单位为毫秒(或者是调度器的内部时钟决定的时间单位)
  • scheduler Scheduler 可选,默认为async,调度器,用来提供时间的概念

例如:

1
2
3
4
5
6
import {interval} from 'rxjs';
const interval$ = interval(3000);
interval$.subscribe(number => {
console.log('number', number);
});
// ...0...1...2...

timer 延时器

创建一个Observable,该Observable在初始延时之后开始发送并且在每个时间周期后发出自增的数字。

就像是interval,但是你可以指定什么时候开始发送。

例如:

1
2
3
4
5
6
7
import {timer} from 'rxjs';
const timerSub = timer(3000, 1000);
timerSub.subscribe(number => {
console.log('number', number);
});
// 运行三秒之后,输出0,然后间隔一秒开始输出自增数字。
//...0.1.2.3.4.5.....

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两个最重要的概念:ObservableObserverObservable就是”可以被观察的对象“即”可被观察者,而Observer就是”观察者“,链接两者的桥梁就是Observerable对象的函数subscribe

我们给上面timer的用法添加一个变量:

1
2
3
4
const timer$: Observable<number> = timer(3000, 1000);
const timerSub: Subscription = timerSub.subscribe(number => {
console.log('number', number);
});

这样,我们可以明确的看到,使用操作符timer创建了一个Observable可观察对象,然后我们使用Observablesubscribe方法来创建一个观察者Subscription对象,现在,我们可以通过调用观察者的unsubscribe方法来释放一个资源:

1
2
3
4
5
6
const timerSub: Subscription = this.timer$.subscribe(number => {
console.log('number', number);
if (number > 10) {
this.timerSub.unsubscribe();
}
});

也就是说,当运行第十次后,就取消监听。

Subscription类型表示可清理的资源,比如Observable的执行。Subscripiton有一个重要的方法:unsubscribe.该方法不接受任何参数,并且清理该Subscription持有的资源。另外,Subscriptions可以通过add()方法进行分组,即给当前Subscription添加子Subscription。当Subscription取消订阅时,它所有的子孙Subscription都会被取消订阅。


完~

码字辛苦,打赏个咖啡☕️可好?💘