RXJS部分操作符解释

2023-11-12

RXJS部分操作符解释

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div><label for='length'>长</label><input id='length' type='number'></div>
  <div><label for='width'>宽</label><input id='width' type='number'></div>
  <div id='area'></div>
<script src="https://unpkg.com/@reactivex/rxjs@5.0.3/dist/global/Rx.js"></script>
</body>
</html>
const length = document.getElementById('length');
const width = document.getElementById('width');
const area = document.getElementById('area');

//所有的Rx数据流后面加$,约定规范
const length$ = Rx.Observable.fromEvent(length, 'keyup').pluck('target', 'value');
const width$ = Rx.Observable.fromEvent(width, 'keyup').pluck('target', 'value');

//height$.subscribe(val => console.log(val.target.value + '    ' + new Date()));

//但两个输入的流都有值时对流中最新的值进行计算
const area$ = Rx.Observable.combineLatest(length$, width$, (l,w) => {return l*w} );
area$.subscribe(val => {area.innerHTML = val});

//但两个输入的流都有新值出现的时候进行计算,注意不是取最新值,第二次变化的值只匹配第二次变化的值
//const area$ = Rx.Observable.zip(length$, width$, (l,w) => {return l*w} );
//area$.subscribe(val => {area.innerHTML = val});

//interval 0.1秒发射一个值      val其实就相当于next,err和complete是可选项
//let logMessage = "当前的值是"
const interval1$ = Rx.Observable.interval(200)
                       //.map(val => val * 2)
                       .filter(val => val % 2 === 0)
                       //.do(v => {
                       //  console.log(logMessage + v);
                       //  logMessage = "当前";
                       //})
                       .scan( (x, y) => {return x + y})
                       .take(4);
interval1$.subscribe(
  val => console.log(val),
  err => console.log(err),
  () => console.log('I am complete')
);

//因为reduce取得是最终值,而interval是没有最终值的,所以要把take放在reduce前面,不然会没有输出
const interval2$ = Rx.Observable.interval(100)
                      .filter(val => val %2 === 0)
                      .take(4)
                      .reduce( (x, y) => {return [...x, y]}, [])
interval2$.subscribe(
  val => console.log(val)
)

//.never不会终止 .throw会抛出err  .empty会直接结束
const errObs$ = Rx.Observable.throw('出错了');
errObs$.subscribe(
  val => console.log(val),
  err => {
    console.log('Error:' + err)
  },
  () => {
    console.log('I am complete')
  }
)

//timer接收两个参数,第一个是一开始的延迟时间,第二个发射参数的间隔时间,
//如果没有第二个参数则只输出一个值,与interval相比多了一个开始的延迟时间
//const timer$ = Rx.Observable.timer(100);
//timer$.subscribe(v => console.log(v))


//Observable:
//from:把数组,Promise,以及Itreable转化成Observable     Rx.Observable.form([1,2,3,4])    -1-2-3-4-
//fromEvent:把事件转化成Observable
//of:接收一系列的数据并把他们emit出去                     Rx.Observable.of({id:1, value:10},{id:2, value:20}, {id:3, value:'dwd'})

//操作符:
//map:将传入的值映射成另一个值
//mapTo:用于不关心传入的值的时候使用,比如计数什么的,.mapTo(1)相当于.map( _ => 1)
//pluck: .pluck("target", "value")相当于.map(val => val.target.value)
//take: 取流当中的前几个值
//filter:过滤流中的数据.filter(val => val %2 === 0)相当于过滤得到偶数
//do: .do在流处理的过程中进行一些操作
//last: .last()取最后一个值,注意如果是一个无穷序列last会取不到值
//skip: .skip(2)过滤掉前两个值
//scan: .scan((x,y) => {return x+y})  x是每上一次scan的值,初始值是0,y是本次序列的值  所以在要记住之前的计算结果的时候用scan是很好用的
// 0--------1----------2----------3----------4----------5-----------6------
// 0-------------------2---------------------4----------------------6------
// 0-------------------2---------------------6----------------------12-----
//reduce: .reduce((x,y) => {return x+y})和scan差不多,不过reduce是发射scan的最终值

//特性:
//next:
//error:
//complete:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RXJS部分操作符解释 的相关文章

  • Angular2 RxJS从地图函数调用类函数

    我是 Angular 2 和 Observables 的新手 所以如果我的问题微不足道 我深表歉意 无论如何 我正在尝试使用 RxJS 测试 Angular 2 HTTP 客户端 虽然我让它工作了 但我需要向我当前正在处理的服务添加更多逻辑
  • 如何在 Angular2 中实现间隔/轮询以与量角器一起使用?

    我有一个 angular2 应用程序 我想用量角器进行测试 在此应用程序中 我有一个带有图表的页面 该页面正在使用自动生成的数据定期更新 显然 Protractor 的一项功能是在执行测试代码之前等待脚本和 http 调用完成 但是 如果有
  • Angular 2 Observable 具有多个订阅者

    我有一个 Angular 2 服务 可以从 API 获取数据 该服务有 3 个订阅者 在组件中定义 每个订阅者都对数据执行其他操作 不同的图表 我注意到我正在向 API 发出三个 GET 请求 而我想要实现的是一个请求 并且订阅者将共享数据
  • Angular 5 中使用 rxjs 进行持久订阅

    我对 Angular 5 中的 rxjs 仍然有点陌生 并且很难表达我的问题 我仍然希望得到一些提示 我经常会得到相同的设置 多个组件显示相同的数据 访问数据的单个服务 现在通过 Observables 接收数据时我有 2 个选择 a 订阅
  • takeUntil 之后执行一些操作

    我在听mousemove事件直到mouseup 我正在这样做takeUntil My code const onMouseMove fromEvent window mousemove const onMouseUp fromEvent w
  • 用玩笑测试 Observables

    如何使用 Jest 测试 Observables 我有一个每秒触发一次的 Observable 我想在玩笑超时之前测试第一个事件是否正确触发 const myObservable timer 0 1000 Example here it s
  • 创建一个简单的调度程序

    我将如何创建一个简单的调度程序 将每个项目延迟一秒 我想将它用于 Observable 是的 我知道这可以通过多种其他方式完成 我只是想使用自定义调度程序来完成它 这里有一些相关教程 http codebetter com matthewp
  • 如何使用 rxpy/rxjs 延迟事件发射?

    我有两个事件流 一个来自电感环路 另一个来自网络摄像机 汽车将驶过环路 然后撞上相机 如果事件彼此相差在 N 毫秒内 汽车总是会首先进入循环 我想将它们组合起来 但我也希望每个流中不匹配的事件 硬件可能会失败 全部合并到单个流中 像这样的事
  • RxJS 比命令式更快吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对函数式编程和函数式反应式编程比较陌生 我读了很多遍函数式反应式编程的强大力量 好的 可读 避免副作用等 但是 我不知道如何以功能
  • Angular 2 中的 Observable 和 ngFor

    下面是一个使用 rxjs Observables 的简单示例 Angular 2 组件 import Component OnInit from angular core import Observable from rxjs Observ
  • 可观察的重试 / retryWhen 与平面地图

    我有以下代码来获取 id 以及与 id 相关的数据 process Observable
  • 从 HTML 模板调用异步函数(Retunes Observable)

    HTML 模板上显示的数据是关键表单数据 意思是 需要翻译 为此 我想从我的模板中调用异步函数 尝试过这个 但没有成功 模板 span class myClass rowValue translateServingStyle size de
  • ng2-翻译 customLoader 和每种语言的多个文件

    在 Ionic2 应用程序中 我使用 ng2 翻译应用程序中的字符串 现在我需要将翻译文件分成每种语言的多个文件 例如de json and de gs1ais json 由于 ng2 translate 仅限于每种语言一个文件 我尝试实现
  • rxjs 主题应该在课堂上公开吗?

    假设我有两个类 您可以在其中观察一些可观察量 第一个例子 公共主题 class EventsPub public readonly onEnd new Subject
  • RxJ 从 observable 中获取价值

    在组件中 singleEvent Observable
  • 如何获取 RxJs 中的BehaviorSubject 中哪些对象发生变化?

    我正在监听一个可观察的对象 在第一次发出所有对象后 我只想获取发生变化的对象 所以如果我有 name Mark name Joe 然后名称更改我只得到更改的对象 所以如果对象变成 name Jean Mark name Joe 我只得到 n
  • 角度-触发新警报时以编程方式关闭警报

    我有两种警报 辅助警报和延迟警报 首先显示辅助警报消息 用户必须单击 确定 按钮才能将其关闭 但也有延迟警报 这是由setTimeout 当向用户显示此延迟警报时 我尝试自动关闭辅助警报 我试图像这样消除次要警报 this secondar
  • Angular 4 Subscribe方法多次调用

    我正在创建一个全局模态组件 我的问题是 当我调用 subscribe 方法时 它会根据调用的模态数量多次调用 如何防止对可观察订阅方法的多次调用 请检查下面我的代码 提前致谢 模态 model ts export class Modal t
  • 您在需要流的地方提供了无效的对象。您可以提供 Observable、Promise、Array 或 Iterable

    假设我有以下函数引用 const externalRequests params gt Rx Observable zip externalApi1 params externalApi2 params and const internal
  • Angular 2 从 Observable 获取项目的方法

    给定 Angular 2 服务中的以下 Typescript getLanguages return this http get this languagesUrl map res gt

随机推荐

  • vscode写PHP代码双击无法复制变量$ 解决方法

    第一步 文件 gt 首选项 gt 设置 第二步 设置里面搜索 word separators 然后用此处的正则替换红框处的正则配置 lt gt
  • 实训三:文件系统命令及vi编辑

    实训三 文件系统命令及vi编辑 2017年 11 月 1 日 今日公布 vim 编辑又三种模型 一般模式 命令模式 编辑模式 练习1 Linux文件系统管理命令 分别用下列命令创建两个用户 useradd 用户名 创建一个用户 passwd
  • 毕业设计 基于Arduino工业温度计

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • 第十四届蓝桥杯校内模拟赛(第二期)题解分享

    文章目录 填空题 最小数 数天数 非常特殊的数 最大值路径 拆分质数个数 编程题 文件拷贝 去除重复单词 变成回文字符串 找X图案 交换的代价 本篇文章中的题解是我在比赛中的思路或者所写的代码 总结出的一篇相对来说比较清晰的个人题解 希望要
  • python抓网页数据(python爬取网站数据)

    标题 Python神器 抓取网页数据轻松搞定 Python语言作为一种强大的编程工具 不仅在数据分析 人工智能等领域大放异彩 而且在网络爬虫方面也有着出色的表现 利用Python抓取网页数据已成为许多程序员和研究人员的首选方法 下面就让我们
  • 几种常见的HTML分割线

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 一 基础代码 1 hr 2 hr align cent
  • git使用之上传项目文件到本地仓库

    git使用方式 一 初始化基本信息 1 设置用户名 git config global user name 用户名 例如 git config global user name gumeimen 2 设置邮箱 git config glob
  • c++模板实参推断

    模板实参推断 类型转换与模板类型参数 template
  • this 和 super的区别

    1 this的用法 this 关键字 1 作用范围 本类 不是实例化的对象 而是正在写的对象 2 作用效果 1 表示当前对象 简单来说就是来区分哪个是形参那个是成员变量 例 public void show String name this
  • 制作一份简单的网络地图(世博地图的配准和切割)

    其实我很早的时候就写过一篇 我的 2010世博地图1 0版发布 但没有和大家做明确的说明和制作方法 今天就和大家一起来分享地图配准和地图切割并进行网络发布的问题 其实就是以世博为例制作一份简单的网络地图 网络地图是以Google Maps
  • postgresql日期时间范围查询:一年前到现在日期时间范围

    获取当前时间方式 1 获取当前日期时间 SELECT CURRENT TIMESTAMP 2019 09 02 11 27 37 282 08 2 获取当前时间 SELECT CURRENT TIME 11 28 39 636 08 3 获
  • 【Unity 3D】学习笔记 - 粒子系统初探

    Particle System是Unity内用于制作特效的系统 相对比较复杂 粒子系统可以用来制作烟雾 蒸汽 火焰和其他雾化效果 添加粒子系统 GameObject gt Effect gt Particle System 添加一个粒子系统
  • Python使用历史数据模拟法计算投资组合VaR(数据来源为Tushare)

    Python如何使用历史数据模拟法计算投资组合VaR 数据来源为Tushare 本文数据可以点赞关注私信我获取 VaR Value at Risk 是一种常用的风险管理指标 用于衡量投资组合在特定时间内的最大可能损失 历史数据模拟法是一种计
  • Android:年过35岁的程序员还有出路吗,rxjava面试题

    通过上面网友们的分析 其实大家也看的出一个情况 领导选择用你的标准之一 一定是能力的大小 如果技术过硬 年龄从来不会是第一标准 还记得你第一次写代码的时候吗 那种难以抗拒的兴奋和激动 你说你不如年轻人敏捷了 不如他们聪明了 都不是 只是因为
  • C++转换函数

    一 定义 转换构造函数是将其他类型转化为当前class类型 反之 就是转换函数 转换函数的定义格式 operator type TODO return data operator 是 C 关键字 type 是要转换的目标类型 data 是要
  • 【学习笔记】编程规约

    概述 阿里Java开发手册对编程规约 异常日志 单元测试 安全规约 MySQL数据库 工程结构 设计规约进行了规范并且进行了开源 整个手册针对java程序的诞生过程进行较为全面的规范 并且有插件 P3C 进行检查 结尾附地址 即使不是jav
  • 剑指offer_第3题_从尾到头打印链表

    题目描述 输入一个链表 按链表值从尾到头的顺序返回一个ArrayList 链表结构 class ListNode def init self x self val x self next None 理解 什么是链表 python数据结构之链
  • C语言从字符串中提取数字

    利用正则表达式 参考 http blog csdn net yangbingzhou article details 51352648 include
  • 使用AD(Altium Designer)三年的笔记(虽然很口语化,但是好记性不如烂笔头嘛~开熏)

    AD使用心得 1 放置过孔阵列 首先在边角或中间放置一个过孔 选中此过孔 高亮显示 Ctrl C 此时光标变为大十字 将十字放在过孔的中心 左键 编辑 特殊粘贴 在弹出的复选框中选择前两项 2 怎样将PCB板的四个角画成圆弧形 Keepou
  • RXJS部分操作符解释

    RXJS部分操作符解释 div div