RxJS 是一个专注于异步编程和事件驱动的 JavaScript 库,具备强大的函数式编程特性和操作符。
其中,interval
操作符是 RxJS 中较为常见的一个操作符,意为以固定时间间隔按顺序发出连续的整数。
基础用法
interval
操作符需要指定一个时间间隔参数 period
,以毫秒为单位,来决定每个整数的发出时间间隔。
示例代码:
import { interval } from 'rxjs'; interval(1000).subscribe((value) => { console.log(`received: ${value}`); });
输出如下,每隔一秒输出一个整数:
received: 0 received: 1 received: 2 received: 3 ...
取消订阅
当我们需要手动取消订阅时,可以使用 unsubscribe()
方法。
示例代码:
-- -------------------- ---- ------- ------ - -------- - ---- ------- ----- ------------ - -------------------------------- -- - ---------------------- ----------- --- ------------- -- - --------------------------- -- ------ -- ---------
该代码会在 5 秒后停止输出。
更多操作符
interval
操作符可以和其他操作符结合使用,以达到更丰富的功能。
take
操作符表示仅发射前 n 个值,然后完成。map
操作符可以将每个发出的整数映射为一个新的值。
示例代码:每隔一秒输出前5个偶数。
-- -------------------- ---- ------- ------ - -------- - ---- ------- ------ - ----- --- - ---- ----------------- -------------- ------ -------- ----------- -- ----- - -- - ------------------ -- - ---------------------- ----------- ---
输出结果为:
received: 0 received: 2 received: 4 received: 6 received: 8
深入探索
我们可以使用 inspectTime
操作符来深入探索 interval
操作符的输出间隔,并在控制台中打印每个值发出和输出的时间。
示例代码:
-- -------------------- ---- ------- ------ - -------- - ---- ------- ------ - ----- ---- --- - ---- ----------------- -------------- ------ -------- ----------- -- --------------------- ----- ----- ---------------------------- - ------------ ----------- -- ----- - --- ----------- -- ------------------- ----- ----- ---------------------------- - ----------- - -------------
输出结果为:
-- -------------------- ---- ------- -------- ----- -------- - - ------ ----- -------- - - -------- ----- -------- - - ------ ----- -------- - - -------- ----- -------- - - ------ ----- -------- - - -------- ----- -------- - - ------ ----- -------- - - -------- ----- -------- - - ------ ----- -------- - -
从中我们可以看出,当时间间隔不准确时,每个值的发出时间会递增一定偏差,但输出时间并没有改变。
总结
interval
操作符可以以固定时间间隔发出连续的整数。unsubscribe()
方法可以手动取消订阅。take
和map
操作符可以与interval
操作符进行结合。inspectTime
操作符可以深入探索interval
操作符的输出间隔。- 在实际应用中,
interval
操作符可以用于实现定时任务等场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646dce1a968c7c53b0c6e30d