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)