欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

rxjs里的Observable对象subscribe方法的执行原理

发布时间:2023/12/19 编程问答 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的原创文章,请关注公众号"汪子熙":

总结

以上是生活随笔为你收集整理的rxjs里的Observable对象subscribe方法的执行原理的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。