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 - 创建异步数据的Observable对象

RxJS 5,将 observable 转换为 BehaviorSubject(?)

Angular2 rxjs 缺少 observable.interval 方法

Rxjs笔记三:Observer的简写形式以及退订Observable

Angular2 RxJS 得到“Observable_1.Observable.fromEvent 不是函数”错误

RxJS主题(Subject)