rxjs of操作符生成的Observable对象的执行详细分析

rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析rxjs of操作符生成的Observable对象的执行详细分析

import { config } from './config';

import { hostReportError } from './util/hostReportError';

export const empty = {

   closed: true,

   next(value) { },

   error(err) {

       if (config.useDeprecatedSynchronousErrorHandling) {

           throw err;

       }

       else {

           hostReportError(err);

       }

   },

   complete() { }

};

//# sourceMappingURL=Observer.js.map

ExtensibilityExtensibility

![](https://img-blog.csdnimg.cn/img_convert/fd30a74f127e31a732add12cbcbabc05.png)

所以toSubscriber返回的实际是一个subscriber对象:

![](https://img-blog.csdnimg.cn/img_convert/d755db210f9042167caa4c3f8e51fbae.png)

![](https://img-blog.csdnimg.cn/img_convert/d7a08902cbd7f7c2cf54a7e8e440be08.png)

首先调用subscriber对象的add方法,目的是通过这个三元表达式,判断到底应该调用subscribe方法,还是trySubscribe方法:

![](https://img-blog.csdnimg.cn/img_convert/7842df68ea5df9dff9665ee002a0e0bc.png)

在我的Angular10,执行后者:

![](https://img-blog.csdnimg.cn/img_convert/fc35352eb8125afd3f4cb34c2b936136.png)

记住这个语义:Observable的subscribe方法,输入参数为subscriber:

![](https://img-blog.csdnimg.cn/img_convert/39930d88fe8b1b7febc9db45584dd876.png)

_trySubscribe调用_subscribe:

![](https://img-blog.csdnimg.cn/img_convert/c8255b7f4b351bcc80ad7d008b684cf8.png)

然后就执行到了之前用subscribeToArray返回的function内部:

![](https://img-blog.csdnimg.cn/img_convert/cca17064851f45b8998808a521e16e92.png)

注意在这个上下文里,我们既有输入,又有应用程序传入的subscribe函数,因此可以调用next了:

![](https://img-blog.csdnimg.cn/img_convert/00b5a512ad77740193ee1d209d188051.png)

![](https://img-blog.csdnimg.cn/img_convert/d6a9930cec4e5d881e6b3a104bda7da3.png)

next和_next的区别就在于有个this.isStopped的判断:

![](https://img-blog.csdnimg.cn/img_convert/4368c8a5e31f1c595616f2b666383b46.png)

注意语义:Observable调用subscribe,而subscriber调用next.

![](https://img-blog.csdnimg.cn/img_convert/ed88af507bbecd6b570cdb7dbd887e6f.png)

subscriber的desination里包含了应用程序传入的callback:

![](https://img-blog.csdnimg.cn/img_convert/831d2d80553d2ee5723196289f8446a5.png)

![](https://img-blog.csdnimg.cn/img_convert/7934c01b71638f69ce2595b6ed3a976f.png)

subscriber的_tryOrUnsub函数里,最终调用应用程序的callback:

![](https://img-blog.csdnimg.cn/img_convert/4309fcce0db382818f54641af6e04d75.png)

![](https://img-blog.csdnimg.cn/img_convert/f3c9f2197cb9c5812245324c029aee24.png)


上一篇:nginx的配置实例三(负载均衡)


下一篇:拒绝平庸——浅谈Web登录页面设计