rxjs里的Observable对象subscribe方法的执行原理
时间:2022-07-25
本文章向大家介绍rxjs里的Observable对象subscribe方法的执行原理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
看个例子:
const myObservable = of(1, 2, 3);
// 创建一个观察者对象-Observer(处理next、error、complete回调)
const myObserver = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
// 通过Observable的subscribe函数,观察者去订阅可观察者的消息
myObservable.subscribe(myObserver);
调用Observable的subscribe方法,传入一个包含回调函数的observer对象:
后两个参数都是undefined:
在toSubscriber函数里,因为nextOrObserver是我手动传入的对象,所以前两个IF条件均不满足:
进入默认实现,新建一个Subscriber对象:
Subscriber是Subscription的子类:
我们现在的Subscriber的构造函数里,创建一个SafeSubscruber实例:this作为parent subscriber传入
EmptyObserver是从./Observer导入进来的:
从SafeSubscriber的实现能看出,传入的Observer对象的next,error和complete这些函数名称都是硬编码的,必须符合这个命名规范:
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
执行subscribe:
sink的destination包含了应用程序传入的complete, next, error逻辑:
这里能看到,subscribe的逻辑就是,遍历所有Observable参数,依次调用observer的next方法,最后再调用一次complete方法:
next调用私有的_next方法:
this._next调用this.destination.next:
最终调用到应用程序员传入的next方法:
最后的输出:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
- 每周算法练习——n皇后问题
- dg broker配置的问题及分析 (r7笔记第22天)
- 备库搭建中的一波三折(r7笔记第21天)
- Java基础-25(02)图形用户界面编程GUI
- 每周算法练习——最近对问题
- Java基础-25(03)图形用户界面编程GUI
- 数据结构和算法——用动态规划求解最短路径问题
- 备库报警邮件的分析案例(一) (r7笔记第14天)
- 数据结构和算法——动态规划
- Java基础-25(05)图形用户界面编程GUI
- Java基础-25(06)图形用户界面编程GUI
- 51. Socket服务端和客户端使用TCP协议通讯 | 厚土Go学习笔记
- 备库报警邮件的分析案例(二) (r7笔记第15天)
- Gotorch - 多机定时任务管理系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法