【Rxjs】初步感知-不算入门的入门

基于NestJS、LangChain与RxJS构建可扩展AI智能体架构实践 在AI应用开发领域,从简单的问答系统演进到具备自主决策和工具调用能力的智能体(Agent)是当前的重要趋势。其核心原理在于通过模块化架构将大语言模型的推理能力与外部工具执行相结合,实现从“知道”到“能做到”的跨越。这种架构的技术价值在于解决了复杂AI应用在可维护性、可观测性和实时响应方面的工程化挑战。典型的应用场景包括智能客服、自动化工作流、个性化助手等需要多步骤推理与外部交互的系统。本文聚焦于如何利用NestJS的模块化后端框架、LangChain的Agent抽象以及RxJS的响应式编程库,协同构建一个支 阅读详情


rxjs教程指路 中文手册

Rxjs异步数据流编程

个人理解:异步编程,类Promise,功能比Promise更强大

各异步编程语法比较

  • 回调函数
function getcallbackData(callback) {
  setTimeout(() => {
    const data = 'data-callback';
    callback(data);
  }, 1000);
}

getcallbackData((data) => {
  console.log(data)
})
  • Promise
function getPromiseData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      const data = 'data-Promise'
      resolve(data)
    }, 2000)
  })
}

getPromiseData().then((data) => {
  console.log(data);
})
  • rxjs
function getRxjsData() {
  return new Observable((observer) => {
    setTimeout(() => {
      const data = 'data-Rxjs'
      observer.next(data)
    }, 3000)
  })
}

getRxjsData().subscribe((data) => {
  console.log(data)
})

从上面可以看出,rxjs与promise的语法非常相似,rsxj使用的对象是Observable,获取数据使用的关键字是subscribe(订阅)

相比Promise的优势

什么叫优势,你能做的我能做,做的好不好暂且不谈,但是我能做的你做不了,这就是优势了

Rxjs unsubscribe 取消订阅

Promise创建之后,动作是无法撤回的。Observable不一样,动作可以通过unsbscribe()方法中途撤回,而且Observable在内部做了智能的处理。举例如下

function getRxjsData() {
  return new Observable((observer) => {
    setTimeout(() => {
      const data = 'data-Rxjs'
      observer.next(data)
    }, 3000)
  })
}

const res = getRxjsData().subscribe((data) => {
  console.log(data)
})
setTimeout(() => {
  res.unsubscribe(); // 取消订阅
}, 1000)



// 不会打印输出结果

Rxjs 订阅后多次执行

如果我们想让异步里面的方法多次执行,比如下面这段代码

function getIntervalPromiseData() {
  return new Promise((resolve) => {
    setInterval(() => {
      const data = 'Intervaldata-Promise'
      resolve(data)
    }, 2000)
  })
}

getIntervalPromiseData().then((data) => {
  console.log(data);
})

结果promsie中的数据只能打印一次,而Observable不一样,它可以不断地触发下一个值,就像next()这个方法的名字所暗示的那样。

function getIntervalRxjsData() {
    let count = 0;
    return new Observable((observer) => {
      setInterval(() => {
        count++
        const data = 'Intervaldata-Rxjs' + count
        observer.next(data)
      }, 1000)
    })
  }

getIntervalRxjsData().subscribe((data) => {
  console.log(data)
})

//打印结果
// Intervaldata-Rxjs1
// Intervaldata-Rxjs2
// Intervaldata-Rxjs3
// ······

Rxjs 工具函数

在angular中使用rxjs的相关工具函数需要引入相关的模块

import { map, filter } from 'rxjs/operators'
  • filter
function getIntervalRxjsNum() {
  let count = 0;
  return new Observable((observer) => {
    setInterval(() => {
      count++
      observer.next(count)
    }, 1000)
  })
}

getIntervalRxjsNum().pipe(
  filter((value: number) => {
    return value % 2 === 0
  })
).subscribe((data) => {
  console.log(data)
})

// 打印结果
// 2
// 4
// 6
// ···

filter的作用是过滤订阅的数据,上例中,只获取偶数

  • map
getIntervalRxjsNum().pipe(
  map((value: number) => {
    return value * value
  })
).subscribe((data) => {
  console.log(data)
})

// 打印结果
// 1
// 4
// 9
// ···

与js中数组方法map类似,可以对数据进行修改

  • 复合使用map和filter
getIntervalRxjsNum().pipe(
  filter((value: number) => {
    return value % 2 === 0
  }),
  map((value: number) => {
    return value * value
  })
).subscribe((data) => {
  console.log(data)
})

// 打印结果
// 4
// 16
// 36
// ···

工具函数都是在pipe管道中使用的,有点类似angular中的模板语法

RxJS搜索框实战:用响应式流解决防抖、取消请求与状态同步难题 搜索框是典型的异步交互场景,其本质是用户输入意图的连续表达,而非单次事件触发。传统基于addEventListener+setTimeout+AbortController的实现易导致请求堆积、状态错乱和内存泄漏。RxJS通过Observable将输入、防抖、请求、渲染建模为可组合、可中断、可追溯的数据流,以声明式操作符(如debounceTime、switchMap、takeUntil)替代命令式状态管理,天然支持实时搜索、双模式切换、自动资源回收等复杂需求。本文聚焦搜索框这一高频工程组件,详解如何用Rx 阅读详情

相关推荐

11、掌握 RxJS 中的时间处理:从基础到实战应用

本文深入探讨了 RxJS 中的时间处理机制,从基础概念到实战应用,涵盖了 JavaScript 异步计时的核心挑战与解决方案。文章详细介绍了 RxJS 提供的关键时间操作符,如 interval、timer、timeInterval 和 delay,并通过示例展示了如何结合这些操作符实现同步数据消费、复杂任务调度以及错误处理。此外,还对比了不同操作符的特点与适用场景,帮助开发者根据需求选择合适的工具。无论你是刚接触 RxJS 的新手,还是希望进一步提升异步编程能力的开发者,本文都将为你提供有价值的参考。

ansible6ops的博客 67

RxJS 操作符-学习笔记

此操作符的一个常见用例是在页面加载(或其他事件)时你希望发起多个请求,并在所有请求都响应后再采取行动。当所有 observables 完成时,将每个 observable 的最新值作为数组发出。如果内部 observable 不完成的话,forkJoin 永远不会发出值!

... 1835

UE5高斯泼溅落地全链路:从PLY导入到实时渲染的工程实践

3D高斯泼溅(3D Gaussian Splatting)正从NeRF后处理技术演进为新一代隐式几何渲染范式,其核心在于以可微椭球体替代传统三角面片,通过协方差矩阵与球谐系数实现高质量体素化渲染。该技术突破点云精度瓶颈,但与UE5现有资产管线存在根本性不兼容——静态网格导入器无法解析scale/rot/sh系数等非标顶点语义,标准光栅化管线亦无法执行高斯核采样计算。XV3DGS-UEPlugin通过自定义资产类型、StructuredBuffer GPU数据流与专用材质节点,将高斯泼溅重构为可编辑、可LOD

weixin_33692177的博客 360

我每天都在使用的 10 个 RxJS 运算符

然后我们将一组可观察对象传递给 combineLatest() 函数,该函数返回一个新的可观察对象,该可观察对象发出一个包含每个源可观察对象发出的最新值的数组。在这种情况下,第一个 observable 每秒发出一个新值,第二个 observable 每半秒发出一个新值,因此组合的 observable 每半秒发出一个新值。在此示例中,merge(obs1, obs2) 用于将两个可观察对象 obs1 和 obs2 合并为一个可观察对象,该可观察对象从两个可观察对象发出值。返回值被忽略,原始值不变。

关注我!带你一路 "狂飙" 到底! 6426

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

IMU离散中值预积分 1.1、IMU模型 测量值:加速度计a^、陀螺仪w^, 加上了bias游走和随机白噪声。 真实值:加速度计a、陀螺仪w。 实际情况下,可以获得测量值a^和w^,需要反推真实值。一般忽略随机游走高斯噪声n w=w^-bg; a=qwb(a^-ba)-gw; 1.2、连续时间IMU运动模型,积分 PVQ(两帧之间) 将第k帧和第k+1帧所有的IMU进行积...

try_again_later的博客 9267

RxJS 高阶映射操作符详解:map、mergeMap 和 switchMap

本文介绍了RxJS中常用的四种操作符:map、mergeMap、switchMap和tap,并通过示例展示了它们的使用场景和特点。

逆袭的菜鸟X 1166

四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

移位寄存器有哪些分类呢? 按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器 按循环方式分类:①循环移位寄存器②非循环移位寄存器 按部位的不同分类:①逻辑移位寄存器②算术移位寄存器 按输入输出方式分类:①串入串出②串入并出③并入串出④并入并出

Loudrs的博客 1万+

rxjs 常用的管道操作符

操作符文档 api 列表 do -> tap catch -> catchError switch -> switchAll finally -> finalize map switchMap mergeMap mep 类似于 Array.prototype.map() switchMap switchMap 会停止发出先前发出的内部 Observable 并开始发出新的...

weixin_34162629的博客 635

Rockchip开发板FUSB302快充调试避坑指南:从设备树配置到驱动修改全流程

本文详细解析了在Rockchip开发板上调试FUSB302快充功能的全流程,重点涵盖设备树配置、驱动修改及硬件设计避坑指南。针对PD协议协商失败、电流倒灌等常见问题,提供了从软件配置到硬件排查的实战解决方案,帮助嵌入式工程师高效完成快充功能开发。

weixin_28256233的博客 114

搭建AutoSAR开发环境

任何开发都需要一套开发环境,包括软硬件环境,笔者后续将介绍的是 NXP 的 S32K144 配套的开发板。接下来详细介绍怎么获取这些软硬件工具。仅供个人学习使用!

cfl927096306的博客 6113

RxJS库的.pipe(),.subscribe()

angular官方文档RxJS 库 RxJS库官方文档 RxJS库 响应式编程是一种面向数据流和变更传播的异步编程范式(Wikipedia)。RxJS(响应式扩展的 JavaScript 版)是一个使用可观察对象进行响应式编程的库,它让组合异步代码和基于回调的代码变得更简单。 RxJS 提供了一种对 Observable 类型的实现,直到 Observable 成为了 JavaScript 语言的一部分并且浏览器支持它之前,它都是必要的。这个库还提供了一些工具函数,用于创建和使用可观察对象。这些工具函数可用

Jq的博客 1万+

AutoSAR配置视频讲解:新建DaVinci工程

AutoSAR实验视频讲解:闪烁一颗LED实验【新建DaVinci工程】 上一篇 | 下一篇 | 总目录 实验架构图 视频本频放在了文末,下图描述了本次实验配置内容在AutoSAR架构中的位置,供大家参考 实验内容 本节课程讲解新建DaVinci工程,听上去新建工程很简单,但是还是需要很多的准备工作和细节。主要内容是新建工程和导入dbc文件和导入arxml文件的方法 主要步骤 新建DaVinci工程 导入.dbc通信矩阵文件 导入Mcal的arxml文件 实验视频2:Mcal配置 提示:版权所在,违

雪云飞星的博客 6276

Rxjs

Rxjs简介建立 Observable观察者 Observervue+rxjs缺点 众所周知,为了避免DOM渲染的冲突,Javascript是单线程模式,该如何解决耗时操作问题?(鼠标键盘事情的处理,远程http请求以及文件io操作等等。 )——异步。 同步代码,直接执行 异步函数先放在异步队列中 待同步函数执行完毕,轮询执行异步队列函数 同步执行异步程序带来回调地狱问题 ES6中引入了Promi...

tangyannan的博客 470

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3206

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RxJS:给你如丝一般顺滑的编程体验(建议收藏)

转自:陌小路juejin.cn/post/6910943445569765384前言怀着对于RxJS这项技术的好奇,笔者花了数天时间研究了这项技术,并肝了一包枸杞才完成这篇文章的撰写,属...

前端达人 1401

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MongoDB 数据库分支(DB Branching)实战指南:用 mirrord 安全克隆远程 MongoDB

本文面向需要在不影响共享环境的前提下,安全验证 MongoDB 数据迁移、Schema 变更与 AI 生成数据库改动的开发团队。mirrord 的 `db_branches` 功能可以在 Kubernetes 集群中为你的 MongoDB 起一个隔离的数据库分支(branch),并自动把本地应用的连接指向它。读完本文,你将掌握 MongoDB 分支的完整配置方法、`empty`/`all` 两种拷

gitblog_00396的博客 388

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Angular takeUntilDestroyed:组件销毁时自动取消 RxJS 订阅的可靠方案

`takeUntilDestroyed` 是 Angular 19 在 `@angular/core/rxjs-interop` 中引入的管道操作符,它利用 `DestroyRef` 在组件或指令销毁时自动完成 Observable,从而免去手动维护 `Subject` 与 `ngOnDestroy` 取消订阅的繁琐逻辑。本文基于 Angular 仓库中该功能的官方文档与真实源码实现,完整讲解其两

gitblog_00357的博客 349

Angular SVG圆形进度条与RxJS集成:实时数据绑定实战教程

想要为你的Angular应用添加优雅的圆形进度条吗?Angular SVG圆形进度条模块正是你需要的解决方案!这个强大的工具使用SVG技术创建美观的圆形进度指示器,特别适合展示文件上传进度、数据加载状态或任何需要视觉反馈的场景。本文将带你深入了解如何将这个进度条与RxJS集成,实现实时数据绑定和响应式更新。 ## 为什么选择Angular SVG圆形进度条? 🎯 Angular SVG圆形进

gitblog_00582的博客 762

Shizuku 免 Root 调用系统 API:从 ADB 到无线调试的完整上手指南

想让 App 直接调系统 API,传统做法是在 su shell 里跑命令,慢,而且不好用。Shizuku 换了个思路:用 ADB 或 Root 先起一个 Shizuku server 进程,App 通过它把请求转发到 system server,再拿回结果,对 App 来说跟直接调 API 几乎没区别。它解决的就是"普通 App 拿不到系统级权限"这件事。 ## 它和 su shell 的差别

gitblog_00692的博客 426

HSMR损失函数实战指南:2D/3D关键点L1损失、参数约束与对抗判别器的完整设计

HSMR(CVPR 2025 Oral,Top 3.3%)是论文 "Reconstructing Humans with a Biomechanically Accurate Skeleton" 的官方开源代码,用**生物力学准确的骨架(SKEL)**从单张图像重建人体。对新手来说,最值得关注的是它的损失函数设计:HSMR 损失函数由 **2D/3D 关键点 L1 损失、参数约束(角度先验 + 参

gitblog_00642的博客 290

Banana Slides 本地部署与使用指南:5 步生成一份完整 AI PPT

Banana Slides 是一个 AI 原生的 PPT 生成应用,本地部署后,用一句话、大纲或页面描述即可生成整套幻灯片,并能导出为可编辑 PPTX、PDF 和讲解视频。 [![Banana Slides 生成的玻璃拟态风格 AI PPT 模板示例,深色背景搭配彩色光效](https://raw.gitcode.com/gh_mirrors/ba/banana-slides/raw/979b4

gitblog_00434的博客 253

RxJS 设计指南深度解读:从异步编排到自定义操作符的 25 条核心规范

> 本文基于 RxJS v4 仓库(The Reactive Extensions for JavaScript)中的官方设计指南文档([doc/designguidelines/readme.md](https://link.gitcode.com/i/496fdfca40e40d71d7797ca0197ac647))编写。该指南由 Rx 团队在开发 RxJS 的过程中逐步沉淀而来,回答了三个

gitblog_00907的博客 748

在 Next.js 中为 Plasmic 页面接入 next-i18next:消息导出与翻译器注入实战

本文基于 Plasmic 开源仓库中的 `nextjs-i18n-i18next` 示例项目,讲解如何将 Plasmic 可视化构建的页面接入 `next-i18next` 国际化框架。读完本文,你将掌握:通过 CLI 命令将 Plasmic Studio 项目中的文案一键导出为 JSON 消息文件、为多语言维护翻译文件、用 i18next 原语编写 `PlasmicTranslator` 并注入

gitblog_00206的博客 131

RxJS API解析(三)

Rx* (Observable.catch)方法 方法定义 Rx.Observable.catch(...args) 作用 序列中可观察对象因为异常而被终止后,继续订阅序列中的其他可观察对象。 参数 args (Array | arguments): 可观察对象序列。 返回值 (Observable): 可观察对象序列中能够正确终止,不抛...

weixin_34247032的博客 105
上一篇: 【js】require和import的区别
下一篇: 【web】仿微博浏览量自增(判断元素是否在可视区+停留2s事件响应)
bye_cherry
博客等级 码龄12年 8粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值