rxjs里的Observable对象subscribe方法的执行原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rxjs里的Observable对象subscribe方法的执行原理相关的知识,希望对你有一定的参考价值。
参考技术A看个例子:
调用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方法:
最后的输出:
以上是关于rxjs里的Observable对象subscribe方法的执行原理的主要内容,如果未能解决你的问题,请参考以下文章
RxJS 5,将 observable 转换为 BehaviorSubject(?)
Angular2 rxjs 缺少 observable.interval 方法
Rxjs笔记三:Observer的简写形式以及退订Observable