首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >上手 RxJS:掌握异步编程的秘密武器!

上手 RxJS:掌握异步编程的秘密武器!

作者头像
萌萌哒草头将军
发布2025-05-13 09:27:00
发布2025-05-13 09:27:00
20200
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:0
代码可运行

前言

昨天介绍 Effect-TS 时,有小伙伴问我:和 RxJS 的语法很像,他们有什么区别?

出于我好奇我摸鱼的时候学习了下,今天分享给大家!使用 Effect 魔法解锁 TypeScript 的函数式超能力!

正文

1. 核心概念

RxJS 是一个基于 Observables 的库,用于处理异步和基于事件的编程。它通过响应式编程范式,让开发者能够以声明式的方式管理复杂的数据流和事件,下面是几个核心概念

  • ObservableObservable 是 RxJS 的核心,表示一个可以随时间发出多个值的数据流。你可以将其想象成一个“可订阅的管道”,通过它可以接收数据。
代码语言:javascript
代码运行次数:0
运行
复制
import { Observable } from 'rxjs';

const observable = new Observable(subscriber => {
  subscriber.next(1);
  subscriber.next(2);
  setTimeout(() => {
    subscriber.next(3);
    subscriber.complete();
  }, 1000);
});
  • ObserverObserver 是订阅 Observable 的对象,包含 nexterrorcomplete 方法,用于处理 Observable 发出的值、错误和完成状态。
  • SubscriptionSubscription 是订阅 Observable 后返回的对象,用于管理订阅状态,比如取消订阅
代码语言:javascript
代码运行次数:0
运行
复制
const subscription = observable.subscribe({
  next: value => console.log(value),
  error: err => console.error(err),
  complete: () => console.log('Completed')
});

// 取消订阅
subscription.unsubscribe();
  • Operators:RxJS 提供了丰富的操作符(如 mapfiltermergeMap 等),用于转换和操作数据流
代码语言:javascript
代码运行次数:0
运行
复制
import { of } from 'rxjs';
import { map, filter } from 'rxjs/operators';

of(1, 2, 3, 4)
  .pipe(
    filter(x => x % 2 === 0),
    map(x => x * 2)
  )
  .subscribe(x => console.log(x)); // 输出 4, 8
2. 常用操作符

RxJS 的操作符是其强大功能的核心,以下是几个常用的操作符:

  • map:对数据流中的每个值进行转换。
  • filter:过滤符合条件的值!
  • mergeMap:将一个 Observable 映射为另一个 Observable,并将结果展平。
  • debounceTime:延迟发出值,常用于处理用户输入防抖!
代码语言:javascript
代码运行次数:0
运行
复制
import { fromEvent } from 'rxjs';
import { debounceTime, map } from 'rxjs/operators';

const input = document.querySelector('input');
fromEvent(input, 'input')
  .pipe(
    debounceTime(300),
    map(event => event.target.value)
  )
  .subscribe(value => console.log(value));
3. 实际应用场景
  • 表单输入防抖:通过 debounceTime 减少不必要的 API 请求。
  • 实时数据处理:如 WebSocket 数据流,通过 mergeMapfilter 处理复杂逻辑。
  • 异步任务协调:使用 forkJoincombineLatest 组合多个异步请求!
代码语言:javascript
代码运行次数:0
运行
复制
import { forkJoin, of } from 'rxjs';
import { delay } from 'rxjs/operators';

const source1 = of('Hello').pipe(delay(1000));
const source2 = of('World').pipe(delay(2000));

forkJoin([source1, source2]).subscribe(([res1, res2]) => {
  console.log(`${res1} ${res2}`); // 输出 "Hello World"
});

最后

学习完之后,虽然在语法上颇有相似之处,但是给我的第一感觉:Effect-ts 的设计理念是基于副作用思想的开发范式,而 Rx.js 脱胎于响应式编程思路的开发范式,另外 Rx.js 主打的是处理异步事件流,而 Effect-ts 主打的是比 TypeScript 更安全的类型推理!

官网:https://rxjs.dev/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌萌哒草头将军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 1. 核心概念
    • 2. 常用操作符
    • 3. 实际应用场景
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档