当前位置: 首页 > news >正文

Nestjs框架: RxJS 核心方法实践与错误处理详解

RxJS 核心方法实践与错误处理详解

  • 围绕 RxJS 的核心方法进行实操
  • 涵盖 observable 的构建、定时器的使用、错误处理机制(如 retrycatchError)、以及 deferlastValueFrom 的使用场景

1 )RxJS 基础实践:Timer 的使用

我们首先在项目中使用 RxJS 的 Observabletimer 方法来进行实际操作。由于项目中已通过 netDS 依赖引入了 RxJS,因此无需额外安装。

我们新建一个名为 indexMGS 的文件,并在其中导入以下内容:

import { Observable } from 'rxjs';
import { timer } from 'rxjs';

随后,我们定义一个定时器:

const exampleTimer = timer(2000); // 2秒后触发

然后订阅该定时器:

exampleTimer.subscribe({next: (value) => console.log('timeremitted', value),complete: () => console.log('timercomplete')
});

这段代码会在两秒后输出 timeremitted 0,并在完成后打印 timercomplete

2 )错误处理:Retry 与 CatchError 的配合使用

接下来我们演示如何使用 RxJS 提供的 错误处理 API,包括 throwErrorretrycatchError

我们定义一个 observable,主动抛出错误:

const errorObservable = new Observable((subscriber) => {subscriber.error(new Error('this is an error'));
});

通过 pipe 方法结合 retry(3)catchError 实现重试三次并捕获最终错误:

import { retry, catchError } from 'rxjs/operators';errorObservable.pipe(retry(3),catchError((err) => {console.log('caught error:', err.message);return throwError(() => new Error('after retries'));})
).subscribe({error: (error) => console.log('subscribe error final:', error.message)
});
  • 在测试过程中,“retry”被执行了4次,这是因为第一次执行也算作一次尝试,之后才进行三次重试
  • 这一机制非常适用于网络请求或数据库连接等需要自动重试的场景

3 )延迟创建:使用 Defer 与 LastValueFrom 获取最终值

  • 第三个示例中,我们将使用 deferlastValueFrom 来演示延迟创建 observable 并获取其最后一个值。

  • 我们定义一个 defer observable:

    import { defer } from 'rxjs';const deferredObservable = defer(() => {console.log('observable created');return new Observable((subscriber) => {subscriber.next('hello');subscriber.complete();});
    });
    
  • 接着使用 lastValueFrom 获取 observable 的最后一个值:

    import { lastValueFrom } from 'rxjs';async function getDeferredValue() {const result = await lastValueFrom(deferredObservable);console.log('deferred value:', result);
    }
    
  • 运行后,控制台将输出:

    observable created
    deferred value: hello
    
  • lastValueFrom 的作用是将 observable 转换为 promise,并返回其最后一个值

  • 它会自动订阅该 observable 并等待其完成

4 ) 结合 Timer 实现延迟输出

  • 示例 让 hello 在两秒后输出,实现方式如下:

    subscriber.next('hello three');
    subscriber.complete();
    
  • 修改为使用 timer 延迟执行:

    timer(2000).subscribe(() => {subscriber.next('hello three');subscriber.complete();
    });
    
  • 运行后,observable created 会立即输出,而 deferred value: hello three 将在两秒后打印

总结

  • 通过以上三个示例,实现了 RxJS 的几个核心方法:
      1. Timer:用于定时触发 observable 的响应。
      1. Retry 与 CatchError:实现错误自动重试及最终错误捕获。
      1. Defer 与 LastValueFrom:延迟创建 observable 并获取其最终值。
  • 这些方法在实际开发中具有广泛的应用价值
  • 例如在处理网络请求、数据库连接、异步任务调度等场景时
  • 能够极大地提升代码的健壮性与可维护性
  • 建议大家结合官方 RxJS 文档,进一步深入理解这些操作符的原理与使用技巧
  • 并将其应用到实际项目中,例如 freestmas 模型的构建与优化
http://www.lryc.cn/news/593220.html

相关文章:

  • 告别项目混乱:基于 pnpm + Turborepo 的现代化 Monorepo 工程化最佳实践
  • win10连接鼠标自动关闭触摸板/win10关闭触摸板(笔记本)
  • 深度学习图像分类数据集—六十种植物病害分类
  • ABP VNext + Temporal:分布式工作流与 Saga
  • install_arm_docker.sh
  • Django接口自动化平台实现(三)
  • Django母婴商城项目实践(八)- 数据渲染与显示之首页
  • LLM 的Top-P参数 是在LLM中的每一层发挥作用,还是最后一层?
  • 【设计模式C#】外观模式(用于解决客户端对系统的许多类进行频繁沟通)
  • Django母婴商城项目实践(七)- 首页数据业务视图
  • 洛谷 P2947:[USACO09MAR] Look Up S ← 数组模拟+单调栈
  • 使用 Gunicorn 部署 Django 项目
  • 5 基于STM32单片机的绝缘检测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • 6 STM32单片机的智能家居安防系统设计(STM32代码+手机APP设计+PCB设计+Proteus仿真)
  • 对话访谈 | 盘古信息×锐明科技:中国企业高质量出海“走进去”和“走上去”
  • 家庭KTV v1.1.9 | 曲库丰富,无限制免费K歌
  • 驾驭 Spring Boot 事件机制:8 个内置事件 + 自定义扩展实战
  • 《一行注解解决重复提交:Spring Boot 接口幂等实战》
  • 深入理解设计模式:策略模式的艺术与实践
  • 在非Spring Boot的Spring项目中使用Lock4j
  • 用graphviz画一个关系图
  • 云服务器磁盘IO性能优化的测试与配置方法
  • 2025年7月19日,二维矩阵
  • 智能制造——解读39页汽车行业数字化工厂解决方案【附全文阅读】
  • 异世界历险之数据结构世界(二叉树-leetcode)
  • 国产电科金仓数据库:融合进化,智领未来
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
  • 架构探索笔记【1】
  • JavaScript空值安全深度指南
  • windows内核研究(驱动开发之内核编程)