提问者:小点点

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


我们需要取消订阅可观察对象吗?什么时候我们需要使用取消订阅?

我读了一篇angularfire 2的文章,讨论了如何使用fire base. auth来检查用户的登录状态。在代码的最后,他取消了auth.订阅。https://javebratt.com/angularfire2-email-auth/(请参阅app.组件.ts)。

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

我们是否需要取消订阅完成/错误输出的可观察?以及您是否需要取消订阅Angular 2超文本传输协议调用以防止内存泄漏?


共3个答案

匿名用户

您在完成错误通知上取消订阅是正确的。

我认为关键是auth. tsgetAuth()方法中的注释:

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

因此,您应该使用af. auth.订阅(…)进行订阅,以便在实际的autState更改时收到通知。这意味着它没有完成(类似于可观察.fromEvent(…)),您必须手动取消订阅。

匿名用户

好吧,不仅完成错误事件取消订阅可观察对象,而且这实际上是取消订阅的正确方法。

完成与退订的优势,如这篇文章所列,是:

  • 通常较少的代码
  • 更好的分解/设计代码;您的完成规则在一个地方;订阅的开始和结束在一个地方
  • 您利用完成事件编写任何“完成/清理”代码(没有取消订阅事件)

匿名用户

我也从作者那里得到了答案:

豪尔赫·维加拉

你不需要(取消订阅())。我这样做是因为我只希望可观察对象在应用程序启动时将人们发送到这些页面,如果我要登录我的用户或在auth中进行一些更改,我不希望该观察者启动并将我的用户重定向到某个地方。