[英]How to create Observable from Subject without exposing the Subject to consumers in RxJs v5
我正在嘗試從內部使用Rx.Subject的函數返回一個observable。 當然,與任何優秀的API一樣,實現細節應該完全從消費者中抽象出來。 但是,使用Subject.asObservable(),任何使用者都可以向所有觀察者發布新值。
例:
const subject = new Rx.Subject();
const observable = subject.asObservable();
observable.source === subject; // true
observable.forEach(value => console.log(value));
observable.source.next('Hello');
// Causes the forEach above to print "Hello"
所以我的問題是,是否有一種內置的方法可以向消費者公開Observable而不讓他們訪問原始主題? 如果不是這在RxJs的部分顯然是糟糕的設計。
注意:這適用於RxJS v5
我知道, 真正封裝它的唯一方法是訂閱函數內的主題,並返回另一個(主題或自定義obervable)發出這些值。
但是任何運算符(甚至像Observable.combineLatest(subject)
這樣的創建運算符)都有一些訪問源的方法。
另一種“解決”這種方法的方法是使用Typescript,因為TS編譯器會告訴你,你不能訪問Observable
上的受保護屬性source
,因為它不是公共屬性: https : //github.com/ReactiveX /rxjs/blob/master/src/Observable.ts#L30 - 當然在ES5中沒有“受保護”這樣的東西,因此它仍然可以通過控制台訪問,例如
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.