RxJS Observable 创建操作符详解:从 create 到 timer
本文详细介绍 RxJS 中用于创建 Observable 的核心操作符,包括 create、empty、from、of、fromEvent、fromPromise、interval 和 timer。通过具体代码示例,展示如何根据需求选择合适的创建方式,实现高效的异步数据流处理。
操作符是 Observable 的核心动力,为复杂的异步任务提供了优雅且声明式的解决方案。
本文将简要梳理 Observable 创建实例中涉及的关键 API,并通过代码片段演示其具体用法。
一、创建实例
1. create
create 想必大家已不陌生,它允许通过指定的订阅函数来创建 Observable。
// RxJS v6+
import { Observable } from 'rxjs';
/*
创建在订阅函数中发出 'Hello' 和 'World' 的 observable 。
*/
const hello = Observable.create(function(observer) {
observer.next('Hello');
observer.next('World');
});
// 输出: 'Hello'...'World'
const subscribe = hello.subscribe(val => console.log(val));2. empty
empty 会生成一个空的 Observable。一旦订阅该 Observable,它将立即发送 complete 信号。
var source = Rx.Observable.empty();
source.subscribe({
next: function(value) {
console.log(value)
},
complete: function() {
console.log('complete!');
},
error: function(error) {
console.log(error)
}
});
// complete!3. from
使用 from 可以接收任何可列举的参数(例如 JavaScript 数组)。
// RxJS v6+
import { from } from 'rxjs';
// 将数组作为值的序列发出
const arraySource = from([1, 2, 3, 4, 5]);
// 输出: 1,2,3,4,5
const subscribe = arraySource.subscribe(val => console.log(val));4. of
与 from 类似的 of,同样用于处理列表,按顺序发出任意数量的值。
// RxJS v6+
import { of } from 'rxjs';
// 依次发出提供的任意数量的值
const source = of(1, 2, 3, 4, 5);
// 输出: 1,2,3,4,5
const subscribe = source.subscribe(val => console.log(val));5. fromEvent
fromEvent 将事件转换成 observable 序列;
// RxJS v6+
import { fromEvent } from 'rxjs';
import { map } from 'rxjs/operators';
// 创建发出点击事件的 observable
const source = fromEvent(document, 'click');
// 映射成给定的事件时间戳
const example = source.pipe(map(event => `Event time: ${event.timeStamp}`));
// 输出 (示例中的数字以运行时为准): 'Event time: 7276.390000000001'
const subscribe = example.subscribe(val => console.log(val));6. fromPromise
fromPromise 用于创建由 Promise 转换而来的 Observable,并输出 promise 的结果。
var source = Rx.Observable
.fromPromise((resolve, reject) => {
setTimeout(() => {
resolve('Hello RxJS!');
},3000)
})
// 等同于
var source = Rx.Observable
.from(new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Hello RxJS!');
},3000)
}))7. interval
显然,interval 操作与时间相关,它基于给定的时间间隔发出数字序列。
// RxJS v6+
import { interval } from 'rxjs';
// 每1秒发出数字序列中的值
const source = interval(1000);
// 数字: 0,1,2,3,4,5....
const subscribe = source.subscribe(val => console.log(val));
// import { interval } from 'rxjs';
// const source = interval(1000);
// 等同于
// var source = Rx.Observable.interval(1000);8. timer
timer 是 interval 的增强版,用于在指定持续时间后,再按照指定的时间间隔依次发出数字。
// RxJS v6+
import { timer } from 'rxjs';
/*
timer 接收第二个参数,它决定了发出序列值的频率,在本例中我们在1秒发出第一个值,
然后每2秒发出序列值
*/
const source = timer(1000, 2000);
// 输出: 0,1,2,3,4,5......
const subscribe = source.subscribe(val => console.log(val));至此,关于 JavaScript 中 Observable 操作符创建实例的介绍到此结束。如需了解更多相关内容,请搜索本站过往文章或继续浏览后续文章,感谢大家的支持!
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
