我最近在做 SAP Spartacus 电商云的一个单元测试:

起初我 return 的是 of(),后来发现这样写的话,下图 map 操作符内的匿名函数不会触发。

我们通过单步调试即可找到原因:

首先从当前的 Observable 对象里提取出 map 操作符。每一个通过 pipe 加工过的 Observable 对象,都有一个 Operator 引用。

然后,使用这个 Operator 调用 Observable 对象。

执行第28行逻辑:

这里的 this 仍然指向原始的 Observable 对象,而 array 即是输入参数,也就是传入 of 里的空对象{}.

如果改成 of(), 那么第2行的 array 为空,因此根本不会进入 for 循环,所以 map 操作符里的匿名函数,也就没有机会得到执行了:

每个 map Operator 都维护了一个 project 属性,指向 map 调用时传入的匿名函数:

现在就执行到我的匿名函数了:

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

Rxjs of() 和 of({}) 的区别相关推荐

  1. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )

    Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...

  2. Rxjs BehaviorSuject 和 Observable 的区别

    https://stackoverflow.com/questions/39494058/behaviorsubject-vs-observable BehaviorSubject is a type ...

  3. Rxjs takeWhile 和 filter 操作符的区别

    官网链接:https://www.learnrxjs.io/learn-rxjs/operators/filtering/takewhile import { of } from 'rxjs'; im ...

  4. rxjs ThrottleTime 和 debounceTime 的操作符区别

    throttleTime 的作⽤是限制在 duration 时间范围内,从上游传递给下游数据的个数: debounceTime 的作⽤是让传递给下游的数据间隔不能⼩于给定的时间 dueTime. 一旦 ...

  5. Rxjs 里 Subject 和 BehaviorSubject 的区别

    通过一个实际的例子来理解. 下面的代码,创建了一个新的 subject,然后调用 next 方法,多播给其所有的监听者. import { Subject } from 'rxjs';const je ...

  6. rxjs里subscribe和tap的区别

    stackoverflow上的讨论:https://stackoverflow.com/questions/49184754/tap-vs-subscribe-to-set-a-class-prope ...

  7. Promise 与 RXJS的区别

    回调地狱与 Promise 在使用 Ajax 的过程中,经常会遇到这种情况:我们需要在一个 Ajax 里面嵌套另一个 Ajax 调用,有时候甚至需要嵌套好几层 Ajax 调用,于是就形成了所谓的&qu ...

  8. RxJS - Observables, observers 和 operators 简介

    RxJS 是响应式编程 (reactive programming) 强大的工具,今天我们将深入介绍 Observables 和 Observers 的内容,以及介绍如何创建自己的操作符 (opera ...

  9. Rxjs 的一些学习笔记

    源自观察者-发布者设计模式: 观察者注册于 Subject 上,每当 subject 状态发生变化时,通知观察者. RxJs 里的 Observable 就是 Subject: 管道:连接 Obser ...

最新文章

  1. 利用三层交换机实现VLAN间路由
  2. runtime objc_msgSend
  3. 30秒就能理解的JavaScript优秀代码
  4. 【Linux】手把手教你在 Linux 环境下部署 Oracle 数据库!
  5. Cronolog 分割 Tomcat8 Catalina.out日志 (转)
  6. Logback的配置说明
  7. ORDER BY分类
  8. oracle查询所有表字段属性_MybatisPlus基础篇学习笔记(四)------查询方法
  9. matlab e52pt,matlab 神经网络的文字识别 有详细注释-补充样本
  10. JDK 8 foreach的用法
  11. 微信公众号全局返回码
  12. JAVA 根据身份证计算年龄
  13. 如何批量压缩图片?这几个方法值得一试
  14. GitHub 官宣:弃用 trending 热榜,开发者炸锅了
  15. Python 3.11 ,即将变得更快!
  16. 【Practical】产生不大于N的连续素数序列 —— 埃拉托色尼筛法
  17. Mencoder常用视频转换参数
  18. idea中xml打开方式变成file,如何将file格式文件变回.xml文件
  19. 泛函分析基础-如何证明l^∞是完备的度量空间
  20. 计算机数字音乐谱 凉凉,凉凉数字简谱

热门文章

  1. 解决Win10 Virtualbox5.2.18桥接不能联网小记
  2. 产品经理如何基于需求迭代产品(下篇3):产品的整体设计之逻辑层和交互层...
  3. python 决策树 math库 c45算法
  4. Slide:配置Oracle 10g双向流复制
  5. 如何正确的在一个循环中删除ArrayList中的元素。
  6. 光伏市场抢装潮6月底前或重现
  7. 详细解读神经网络十大误解,再也不会弄错它的事情原理
  8. Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
  9. Xcode的SVN提示The request timed out.的解决方案
  10. (转)浅析CSS——元素重叠及position定位的z-index顺序