当前位置: 首页 > 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.dtcms.com/a/287559.html

相关文章:

  • 数据结构:字符串(Strings)
  • 图解系统-小林coding笔记
  • 从零入门:云迁移原理详解与华为Rainbow实战指南
  • Linux进程通信——共享内存:System V 进程间通信的极速方案
  • FreeRTOS学习笔记之软件定时器
  • C语言菜鸟入门·浅析strdup和strcpy的区别
  • 1.初始化
  • 【电脑】声卡的基础知识
  • CTF misc之数字取证
  • 我做的基础服务项目,是如何实现 API 安全与限流的(短信、邮件、文件上传、钉钉通知)
  • lazyvim配置
  • 教育科技产品设计:从公司背景到 MVP 方案的落地思路
  • laravel RedisException: Connection refused优雅草PMS项目管理系统报错解决-以及Redis 详细指南-优雅草卓伊凡
  • 传统行业和AIGC的结合及应用
  • Spring AI 项目实战(十八):Spring Boot + AI + Vue3 + OSS + DashScope 实现高效语音识别系统(附完整源码)
  • PyQt5—Qt QDialog 学习笔记
  • 【RK3576】【Android14】SDK源码编译
  • 【RK3576】【Android14】UART开发调试
  • JavaScript基础语法和简单数据结构
  • 【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)
  • RPC(Remote Procedure Call,远程过程调用)介绍
  • MySQL数据丢失救援办法
  • 下一场范式革命:Transformer架构≠最终解法
  • 《全栈博客系统的技术肌理:从接口构建到体验升维的实践路径》
  • 美国VPS服务器Linux内核参数调优的实践与验证
  • 第二次总结(xss、js原型链)
  • 【2025最新】使用neo4j实现GraphRAG所需的向量检索
  • OAIF:基于在线 AI 反馈的语言模型直接对齐
  • [MarkdownGithub] 使用块引用高亮显示“注意“和“警告“和其他注意方式的选项
  • Django母婴商城项目实践(九)- 商品列表页模块