答案 0 :(得分:130)
当您不想泄漏API Subject
的“观察者”时。 (基本上是为了防止漏洞抽象)。
var myAPI = {
getData: () => {
var subject = new Subject();
var source = new SomeWeirdDataSource();
source.onMessage = (data) => subject.next({ type: 'message', data });
source.onOtherMessage = (data) => subject.next({ type: 'othermessage', data });
return subject.asObservable();
}
};
现在当有人从myAPI.getData()
获得可观察的结果时,他们无法next
重视结果:
var result = myAPI.getData();
result.next('LOL hax!'); // throws an error because `next` doesn't exist
答案 1 :(得分:3)
Subject
可以同时充当 observer
和 observable
。。 >
Obervable
有2种方法。
只要订阅到 observable
,您就会得到一个 observer
,其中具有 next < / em>,错误和 complete 方法。
您需要隐藏序列,因为您不希望在每个组件中公开流源。您可以参考@BenLesh
的示例。
P.S。 :第一次使用Reactive Javascript时,我无法理解 asObservable
。因为我必须确保自己清楚地了解基本知识,然后才选择 asObservable
。 :)