Rxjs:可观察的生成是否与主体的asObservable方法一样,与源主体相同?

时间:2018-01-26 02:57:04

标签: rxjs

根据rxjs中的源代码,
asObservable实现是这样的:

asObservable(): Observable<T> {
  const observable = new Observable<T>();
  (<any>observable).source = this;
  return observable;
}

我发现,当源Subject使用next发出一个值时,observable也会向观察者发出数据,这些观察者会对observable进行描述。这非常回答我的问题。但令我困惑的是,为什么我们需要asObservable方法呢?我们不能只使用Subject吗?

1 个答案:

答案 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;
  }
}

该方法的目的是创建一个反映主题的观察者,而不暴露主题的方法。然后可以将该可观察对象返回给调用者。

如果要返回主题本身,则调用者可以调用主题的nexterrorcomplete方法。由asObservable返回的观察结果,这是不可能的。