测试代码:

fromEvent(this.test, 'click').pipe(map( event => event.timeStamp), mapTo(1)).subscribe((event) => console.log(event));

pipe 操作的两个输入操作:

输入参数为数组,包含两个元素:

使用原始的 Observable 作为输入,执行这两个操作:

数组的 reduce 是一个原生方法:

下面这段代码,介绍了 reduce 的用法:

<html>
<script>var a = [1,2,3,4];function fn(pre, cur, index, arr){console.log(`previous: ${pre}, cur: ${cur},index: ${index}, whole arr: ${arr}`);return pre + cur;
}console.log(a.reduce( fn, 0));</script>
</html>

reduce 接受两个参数,第一个参数是一个函数,该函数接收 4 个输入参数,previous,current,index 和 array:

  • previous:前一轮 reduce 迭代值,如果第一轮,则该值为第二个参数,即初始值
  • current:当前这轮的 reduce 迭代值。例如,array 元素为1,2,3,4,则 reduce 每轮迭代,current 值分别为1,2,3,4
  • index:迭代的索引值
  • array:调用 reduce 的原始数组,配合前一个 index 参数,能访问整个数组的内容

在实际使用过程中,previous 和 current 这两个参数用的最多。

回到 pipeFromArray 的实现。

reduce 第一轮迭代:

prev 是 input 传入的初始值,fn 是输入 fns 数组的第一个元素。即第一个 map 返回的 operator:

这里不会执行具体的 map 操作,而是返回一个新的 Observable 对象,作为第二轮 reduce 迭代的输入:

lift 方法就是返回新的 Observable 对象:

mapTo 的实现:

经过 pipe 处理过的 Observable,最后应用程序订阅的,就是这个最终版的 Observable:

更多Jerry的原创文章,尽在:“汪子熙”:

Rxjs Observable.pipe 传入多个 operators 的执行逻辑分析相关推荐

  1. RxJS学习之路四(Operators(1))

    什么是Operators Operators是用来操作处理Observable 的一个函数,对单个或多个Observable进行一定处理后返回新的Observable. 描述各种Operators的功 ...

  2. rxjs的pipe和map配合使用的单步调试

    测试代码: const a = of([1, 2, 3]);const b = map((data: number[]) => {for( let i = 0; i < data.leng ...

  3. Rxjs Observable

    创建Observable: Rx.Observable.create 是 Observable 构造函数的别名,它接收一个参数:subscribe 函数. 例子:每秒推送一个"Hi" ...

  4. 将 Observable.pipe 的输入参数手动分解

    如下图所示:第38行的变量 this.selectedBrowser.valueChanges 是一个 Observable,我把传递到 pipe 方法的参数,分解成 op1 和 op2: 遇到错误消 ...

  5. rxjs of操作符传入数组的单步执行

    源代码: const a = of([1, 2, 3]);const b = a.pipe(map((data) => {for( let i = 0; i < data.length; ...

  6. 使用 RxJs Observable 来避免 Angular 应用中的 Promise 使用

    我们通过一个具体的例子来阐述. 考虑您正在构建一个搜索输入掩码,该掩码应在您键入时立即显示结果. 如果您曾经构建过这样的东西,那么您可能会意识到该任务带来的挑战. 不要在每次击键时都点击搜索端点 将搜 ...

  7. 通过一个实际例子理解Angular rxjs Observable的异步行为

    源代码: ngOnInit(): void {const a = new Observable((observer) => {observer.next(1);observer.next(2); ...

  8. 如何取消Angular rxjs Observable的订阅

    源代码: ngOnInit(): void {const ob = new Observable(function subscribe(observer) {// 追踪 interval 资源cons ...

  9. 【Groovy】Groovy 脚本调用 ( 命令行执行 Groovy 脚本并传入参数 | 获取 Groovy 脚本执行参数 )

    文章目录 前言 一. 命令行执行 Groovy 脚本并传入参数 二.获取 Groovy 脚本执行参数 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy ...

最新文章

  1. 基于单片机的水壶自动加热系统_基于烟雾检测火灾自动报警系统
  2. JavaFX官方教程(十五)之A Xylophone.java
  3. 几个好用的makefile 几乎可以不用修改
  4. 好看的android动画效果
  5. 小记: 程序设计注意保持逻辑清晰
  6. 分销商城系统模块_分销商城系统模块需求分析_OctShop
  7. Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
  8. c语言程序 中断函数示例,单片机中断应用的C语言编程 -解决方案-华强电子网
  9. Python数据可视化 | 一文带你掌握Pyecharts地理数据可视化
  10. Java How to Program练习题_第六章_深入理解方法(Methods: A Deeper Look)
  11. Windows域控禁用U盘和光盘的策略 【全域策略生效】
  12. 湖南大学计算机与通信学院李燕,基于SVM的面部表情分析
  13. android_iphone和java三个平台一致的加密方法_Android、iPhone和Java三个平台一致的加密工具...
  14. 《使用Java实现一元二次方程求根计算器》改进版
  15. OSNet 论文翻译
  16. ppt模板目录页如何排版设计?
  17. 小白装openstack(二) 安装NTP服务
  18. 【C/C++学院】0901-设计模式的汇总演练
  19. 如何把catia完全卸载干净_电脑卸载不了catia软件怎么办?电脑彻底卸载catia软件的方法...
  20. 【Java基础】(八)方法(即C等语言中的函数)

热门文章

  1. video 标签存在的一些坑
  2. @RequestMapping 和 @GetMapping @PostMapping 区别
  3. 【8-20】java学习笔记02
  4. 安装Microsoft Sysprep工具
  5. 自己有電腦的一定要看看,非常有用呢。
  6. POJ 3020 Antenna Placement
  7. http请求之get和post的区别
  8. 6月21 百度文本编辑器
  9. linux查看端口占用程序
  10. IOS-RunTime(刨根问底)