Rxjs of() 和 of({}) 的区别
我最近在做 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({}) 的区别相关推荐
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...
- Rxjs BehaviorSuject 和 Observable 的区别
https://stackoverflow.com/questions/39494058/behaviorsubject-vs-observable BehaviorSubject is a type ...
- Rxjs takeWhile 和 filter 操作符的区别
官网链接:https://www.learnrxjs.io/learn-rxjs/operators/filtering/takewhile import { of } from 'rxjs'; im ...
- rxjs ThrottleTime 和 debounceTime 的操作符区别
throttleTime 的作⽤是限制在 duration 时间范围内,从上游传递给下游数据的个数: debounceTime 的作⽤是让传递给下游的数据间隔不能⼩于给定的时间 dueTime. 一旦 ...
- Rxjs 里 Subject 和 BehaviorSubject 的区别
通过一个实际的例子来理解. 下面的代码,创建了一个新的 subject,然后调用 next 方法,多播给其所有的监听者. import { Subject } from 'rxjs';const je ...
- rxjs里subscribe和tap的区别
stackoverflow上的讨论:https://stackoverflow.com/questions/49184754/tap-vs-subscribe-to-set-a-class-prope ...
- Promise 与 RXJS的区别
回调地狱与 Promise 在使用 Ajax 的过程中,经常会遇到这种情况:我们需要在一个 Ajax 里面嵌套另一个 Ajax 调用,有时候甚至需要嵌套好几层 Ajax 调用,于是就形成了所谓的&qu ...
- RxJS - Observables, observers 和 operators 简介
RxJS 是响应式编程 (reactive programming) 强大的工具,今天我们将深入介绍 Observables 和 Observers 的内容,以及介绍如何创建自己的操作符 (opera ...
- Rxjs 的一些学习笔记
源自观察者-发布者设计模式: 观察者注册于 Subject 上,每当 subject 状态发生变化时,通知观察者. RxJs 里的 Observable 就是 Subject: 管道:连接 Obser ...
最新文章
- 利用三层交换机实现VLAN间路由
- runtime objc_msgSend
- 30秒就能理解的JavaScript优秀代码
- 【Linux】手把手教你在 Linux 环境下部署 Oracle 数据库!
- Cronolog 分割 Tomcat8 Catalina.out日志 (转)
- Logback的配置说明
- ORDER BY分类
- oracle查询所有表字段属性_MybatisPlus基础篇学习笔记(四)------查询方法
- matlab e52pt,matlab 神经网络的文字识别 有详细注释-补充样本
- JDK 8 foreach的用法
- 微信公众号全局返回码
- JAVA 根据身份证计算年龄
- 如何批量压缩图片?这几个方法值得一试
- GitHub 官宣:弃用 trending 热榜,开发者炸锅了
- Python 3.11 ,即将变得更快!
- 【Practical】产生不大于N的连续素数序列 —— 埃拉托色尼筛法
- Mencoder常用视频转换参数
- idea中xml打开方式变成file,如何将file格式文件变回.xml文件
- 泛函分析基础-如何证明l^∞是完备的度量空间
- 计算机数字音乐谱 凉凉,凉凉数字简谱
热门文章
- 解决Win10 Virtualbox5.2.18桥接不能联网小记
- 产品经理如何基于需求迭代产品(下篇3):产品的整体设计之逻辑层和交互层...
- python 决策树 math库 c45算法
- Slide:配置Oracle 10g双向流复制
- 如何正确的在一个循环中删除ArrayList中的元素。
- 光伏市场抢装潮6月底前或重现
- 详细解读神经网络十大误解,再也不会弄错它的事情原理
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
- Xcode的SVN提示The request timed out.的解决方案
- (转)浅析CSS——元素重叠及position定位的z-index顺序