返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中rxjs与 Observable 两大类操作符解析
  • 910
分享到

JavaScript中rxjs与 Observable 两大类操作符解析

2024-04-02 19:04:59 910人浏览 八月长安
摘要

目录前言1. 可以加入到 pipe 链式操作的 Operator2. 创建型 Operator3. 冷热 Observable 的区别前言 Observable 生产的数据,应该提供

前言

Observable 生产的数据,应该提供开发人员足够的自由度,对这些数据进行各种处理,比如 map / transfORM 等等。这就是 Rxjs Operator 大展身手的地方。

运算符是对 Observable 进行操作并返回 Observable 的函数。 这允许我们链接这些运算符。 链中的每个运算符都会修改由前一个运算符的运算产生的 Observable。

链中的算子不会同时工作,而是按顺序运行,每个算子都在链中前一个算子生成的 Observable 上工作。

订阅是使用 subscribe 运算符完成的。 订阅操作符允许观察者连接 Observable。 观察者要从 Observable 获取数据或错误,首先必须订阅该 Observable。

Rxjs 里的 Operator 可以分为两大类。

1. 可以加入到 pipe 链式操作的 Operator

可管道运算符是可以链接在一起的运算符。 这些是纯函数,它们将可观察对象作为输入并提供可观察对象作为输出。

伪代码如下:

observeable.pipe(
  operator1(),
  operator2(),
  operator3(),
  operator3(),
)

operator1 将接收 observable,对其执行操作并发出 observable。 从 operator1 发出的 observable 被传递给 operator2 作为输入(通过其余的运算符以此类推)。

filter、mergeMap 和 forkJoin 是可管道操作符的一些示例。

2. 创建型 Operator

创建操作符是创建新 Observable 的独立函数。最典型的创建操作符就是 of:

import { of } from 'rxjs';
const observable = of(1, 2, 3);

变量 observable 是一个 Observable 类型的实例,它将发出 1、2 和 3(按顺序)。

create, of 和 from 是创建型操作符的典型例子。

3. 冷热 Observable 的区别

Code Observable 在观察者订阅它之前不会开始发出值。

相反的,Hot Observable 可以随时开始发出值,订阅者可以随时开始观察发出的值。 但是,订阅者可能会错过订阅时间之前发出的任何值。

看个例子:

import { Observable } from 'rxjs';
const observable = Observable.create((observer: any) => {
  observer.next('Hello World!');
});
observable.subscribe((message) => console.log(message)); // Hello World!

这个 Observable 发射的值就是 Hello World. 它会调用订阅者的 next 方法进行发射。

Observable.create 的输入参数是一个订阅者 subscriber. 这是一个函数,函数的输入参数是 Observer,类型为 any. 函数体为执行该输入参数的 next 方法。

Observable 的构造函数很简单,就把 create 传入的函数,设置到 Observable 内部属性 _subscribe 里: 

然后针对 Observable.create 返回的 Observable 实例,调用 subscribe 方法进行订阅。

订阅者的逻辑通过 subscribe 方法传入,是一个函数: 

toSubscriber 方法会创建一个订阅者 subscriber 实例: 

subscriber 的构造函数里,就是简单的为 destination 字段赋值:

这里把 subscribe 函数传入的应用逻辑,赋给 safeSubscriber 的 _next 属性: 

然后执行 _subscribe 方法: 

这个 _subscribe 方法就是 subscribe 函数调用第一步,把 subscribe 传入的应用逻辑赋给 _subscribe 属性的那个函数。

注意,subscribe 函数调用,首先会触发 Observable 的 emit value: 

this._next 触发 destination.next:

这里调用 SafeSubscriber 的 _next 属性指向的方法,即 subscribe 传入的函数实现:

总结一下,Observable.create 和 Observable.subscribe 这套调用, 首先会触发 Observable 实例调用 next 方法,发射调用创建操作符时指定的待发射值。接着会触发应用开发人员传入 subscribe 调用的业务逻辑,消费这个发射的值。

这段代码执行的先后顺序如下: 

到此这篇关于javascript中rxjs与 Observable 两大类操作符解析的文章就介绍到这了,更多相关JS rxjs与 Observable 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript中rxjs与 Observable 两大类操作符解析

本文链接: https://lsjlt.com/news/153176.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript中rxjs与 Observable 两大类操作符解析
    目录前言1. 可以加入到 pipe 链式操作的 Operator2. 创建型 Operator3. 冷热 Observable 的区别前言 Observable 生产的数据,应该提供...
    99+
    2024-04-02
  • JavaScript中rxjs与Observable操作符怎么使用
    这篇文章主要讲解了“JavaScript中rxjs与Observable操作符怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中rxjs与Observable操作符...
    99+
    2023-07-02
  • 浅析JavaScript中的操作符与表达式
    1.表达式1.1原始表达式3.14 //数字直接量 "hello world" //字符串直接量 /pattern/ //正则表达式直接量 true //返回一个布尔值: 真 false //返回一个布尔值:...
    99+
    2022-11-22
    javascript
  • JavaScript中强大的操作符使用详解
    目录一、一元操作符1. 递增和递减操作符(++ --)2. 加和减操作符二、位操作符1. 按位与操作符(&)2. 按位或操作符(|)3. 按位非操作符 (~)4. 按位异或运...
    99+
    2024-04-02
  • C语言 操作符分类解析与使用
    目录操作符的分类算术操作符移位操作符位操作符逻辑操作符逗号表达式表达式求值隐式类型转换算术转换操作符的属性xwg今天就带各位大佬来了解一波C语言的操作符。 操作符的分类 常见的操作符...
    99+
    2024-04-02
  • JavaScript中new操作符的原理与实现详解
    目录一、new做了哪些事二、返回不同类型时有哪些表现三、手写new的实现原理一、new做了哪些事 先看看new的使用场景: // 1、创建一个构造函数 function Vehicl...
    99+
    2022-11-13
    JavaScript new操作符 JavaScript new
  • JavaScript中的操作符与表达式实例代码分析
    这篇文章主要介绍“JavaScript中的操作符与表达式实例代码分析”,在日常操作中,相信很多人在JavaScript中的操作符与表达式实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScr...
    99+
    2023-07-04
  • 详解JavaScript中常用操作符的使用
    目录1、可选链操作符(optional chaining operator)2、空值合并操作符(nullish coalescing operator)3、箭头函数(Arrow Fu...
    99+
    2023-05-17
    JavaScript操作符使用 JavaScript操作符
  • JavaScript中new操作符的原理示例详解
    new的用处 new的作用是通过构造函数来创建一个实例对象,该实例与原型和构造函数之间的关系如下图所示: 先来总结一下 创建一个空对象 空对象的内部属性 __pr...
    99+
    2024-04-02
  • C++中的操作符重载详细解析
    一、什么是操作符重载操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之...
    99+
    2022-11-15
    操作符重载 C++
  • .NET中怎么实现字符串解析操作
    本篇文章为大家展示了.NET中怎么实现字符串解析操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先是“token”,token是最小的信息单元,我们可以把它当作是一个字符串来处理。而多个toke...
    99+
    2023-06-17
  • PHP7中的空格船操作符:如何比较两个表达式的大小?
    PHP7中的空格船操作符:如何比较两个表达式的大小?在PHP7中,引入了一个新的操作符,称为空格船(Spaceship)操作符(96b4fef55684b9312718d5de63fb7121)。这个操作符用于比较两个表达式的大小,并返回适...
    99+
    2023-10-26
    PHP 空格船操作符 表达式的大小
  • Oracle中CLOB大数据字段类型操作的示例分析
    这篇文章主要为大家展示了“Oracle中CLOB大数据字段类型操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle中CLOB大数据字段类型操...
    99+
    2024-04-02
  • Java中IO操作字节流与字符流的示例分析
    这篇文章主要为大家展示了“Java中IO操作字节流与字符流的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中IO操作字节流与字符流的示例分析”这篇文章吧。IO操作字节流java....
    99+
    2023-06-29
  • 如何理解Python中的'=='与'is'操作符
    本篇内容主要讲解“如何理解Python中的'=='与'is'操作符”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Python中的'=='与...
    99+
    2023-06-15
  • C++中文件操作问题分析与解决方案
    C++中文件操作问题分析与解决方案在C++编程中,文件操作是一个非常常见的需求。然而,由于各种原因,可能会出现一些问题。本文将分析几种常见的文件操作问题,并提供相应的解决方案,同时附有具体的代码示例。问题一:文件打开失败当我们尝试打开一个文...
    99+
    2023-10-22
    解决方案 文件操作 问题分析
  • 解析 PHP 中点操作符的重要性和应用场景
    标题:PHP 中点操作符的重要性和应用场景解析 在PHP中,点操作符(.)是连接两个字符串的运算符,也称为字符串连接符。尽管在一些编程语言中,使用加号(+)来连接字符串更为常见,但在P...
    99+
    2024-04-02
  • 基于MongoDB数据库中数据类型和$type操作符的示例分析
    这篇文章将为大家详细讲解有关基于MongoDB数据库中数据类型和$type操作符的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前面的话  本文将详细介绍Mong...
    99+
    2024-04-02
  • Python中关于集合的介绍与常规操作解析
    目录1.集合的介绍2.访问集合的元素3.集合的添加4.集合的修改5.集合的删除1.使用remove方法2.使用pop方法3.使用discard方法6.集合的交集和并集1.交集2.并集...
    99+
    2024-04-02
  • 比较操作系统中的用户级线程与内核级线程:优劣势大解析
    用户级线程与内核级线程的区别 用户级线程和内核级线程是两种不同的线程实现方式。用户级线程是在用户空间中实现的,而内核级线程是在内核空间中实现的。 用户级线程由用户程序创建和管理,不需要内核的参与。内核级线程由内核创建和管理,需要内核...
    99+
    2024-02-06
    线程 用户级线程 内核级线程 多任务 多线程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作