何时在rxjs中使用asObservable()?

时间:2016-05-02 15:52:12

标签: rxjs rxjs5

我想知道asObservable的用途是什么:

根据文档:

  

隐藏身份的可观察序列   源序列。

但为什么你需要隐藏序列?

2 个答案:

答案 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 。 :)