为什么我们需要取消订阅Observerable?

时间:2017-02-05 21:09:37

标签: rxjs5 angularfire2

我们是否需要取消订阅Observable?我们什么时候需要使用取消订阅?

我读了一篇关于使用firebase.auth检查用户登录状态的angularfire2文章。在代码的最后,他取消了auth.subscribe的订阅。 https://javebratt.com/angularfire2-email-auth/(请参阅app.component.ts)。

我真的很困惑,因为我认为Observable会在完成或出错后“取消订阅”。

Do we need to unsubscribe from observable that completes/errors-out?Do you need to unsubscribe from Angular 2 http calls to prevent memory leak?

3 个答案:

答案 0 :(得分:2)

关于取消订阅??Any通知,您是正确的。

我认为关键是getAuth() method in auth.ts中的评论:

  

请通过订阅auth服务异步观察实际的authState:af.auth.subscribe()

因此,您应订阅complete,以便在实际error更改时收到通知。这意味着它没有完成(类似于af.auth.subscribe(...)),您必须手动取消订阅。

答案 1 :(得分:1)

嗯,completeerror事件不仅取消订阅Observable,而且实际上是取消订阅的proper way

本文中列出的完成vs取消订阅的优点是:

  • 通常少了代码
  • 更好的因素/设计代码;你的完成规则在一个地方;订阅开始的地方和结束地点在一个地方
  • 您利用complete事件编写任何“完成/清理”代码(没有unsubscribe事件)

答案 2 :(得分:0)

我也得到了作者的回答:

Jorge Vergara

您不需要(执行取消订阅())。我这样做是因为我只希望observable在app启动时将人们发送到那些页面,如果我要记录我的用户或在auth中做一些更改我不希望观察者启动并在某处重定向我的用户。