【问题标题】:how come we need to unsubscribe from an Observerable ?为什么我们需要取消订阅 Observable ?
【发布时间】:2017-06-22 18:39:20
【问题描述】:

我们是否需要取消订阅 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?

【问题讨论】:

    标签: rxjs5 angularfire2


    【解决方案1】:

    关于取消订阅 completeerror 通知是正确的。

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

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

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

    【讨论】:

      【解决方案2】:

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

      如本文所述,完成订阅与取消订阅的优势在于:

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

      【讨论】:

        【解决方案3】:

        我也得到了作者的回答:

        豪尔赫·维加拉

        您不需要(执行 unsubscribe())。我这样做是因为我只希望可观察者在应用程序启动时将人们发送到那些页面,如果我要让我的用户登录或对身份验证进行一些更改,我不希望那个观察者启动并将我的用户重定向到某个地方。

        【讨论】:

          猜你喜欢
          • 2020-05-30
          • 2022-01-02
          • 1970-01-01
          • 2020-04-26
          • 1970-01-01
          • 2021-09-10
          • 2017-12-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多