根据rxjs中的源代码,
asObservable实现是这样的:
asObservable(): Observable<T> {
const observable = new Observable<T>();
(<any>observable).source = this;
return observable;
}
我发现,当源Subject
使用next
发出一个值时,observable也会向观察者发出数据,这些观察者会对observable进行描述。这非常回答我的问题。但令我困惑的是,为什么我们需要asObservable
方法呢?我们不能只使用Subject
吗?
答案 0 :(得分:2)
asObservable
method会返回Observable
,其主题为source
:
export class Subject<T> extends Observable<T> implements ISubscription {
...
asObservable(): Observable<T> {
const observable = new Observable<T>();
(<any>observable).source = this;
return observable;
}
}
该方法的目的是创建一个反映主题的观察者,而不暴露主题的方法。然后可以将该可观察对象返回给调用者。
如果要返回主题本身,则调用者可以调用主题的next
,error
和complete
方法。由asObservable
返回的观察结果,这是不可能的。