【问题标题】:angular http-requests stream when to unsubscribe何时取消订阅的角度 http-requests 流
【发布时间】:2018-03-08 07:51:35
【问题描述】:

是的,我在网上搜索并阅读了很多讨论,但都没有回答我的问题!!!

Angular/RxJs When should I unsubscribe from `Subscription`

Angular 2 Subscribe / Unsubscribe Observables in case of http calls

我的任务是: 角度(2+)http-response 流,我是否需要在重新使用它之后或之前取消订阅? 说,我有:

  private mystream$: Subscription;

  public MyTask(){
    if (this.mystream$){ this.mystream$.unsubscribe }
    this.mystream$ = http.get(url).subscribe({
      // to do
    })
  }


  ngOnDestroy() {
    if (this.mystream$) { this.mystream$.unsubscribe(); }
  }

所有我读过的,在使用前取消订阅 onDestroy 和流变量检查是没有必要的,但我还没有被说服,因为我通过互联网调用 http.put ,没有保证,它将是或必须是在应用程序之前完成以再次调用 MyTask()。

请告诉我为什么我错了,这个 http.put 流在使用前检查和清理是没有必要的,即使是通过互联网打电话,我的用户也不是耐心的。

【问题讨论】:

标签: angular http rxjs observable


【解决方案1】:

此答案仅适用于您提到的情况,即对 get 方法的 http 请求。

在 angularhttps://angular.io/guide/observables 的官方网站中,你会发现这样的句子“订阅的消费者然后会收到通知,直到函数完成,或者直到他们取消订阅。”。这意味着 subscribe 方法在完成时被 angular 本身取消订阅。

要执行你创建的 observable 并开始接收通知,你调用它的 subscribe() 方法,传递一个观察者。这是一个 JavaScript 对象,它定义了您收到的通知的处理程序。 subscribe() 调用返回一个具有 unsubscribe() 方法的 Subscription 对象,您可以调用该方法来停止接收通知。

上面的解释表明你有一个额外的优势 unsubscribe() 方法可以根据你的条件取消订阅你的订阅。但在再次使用之前,它永远不会强制取消订阅。

现在,当我来到您的代码时,您正在 ngOnDestroy 中取消订阅它,上面写着“现在是通知应用程序的另一部分该组件即将消失的时候了。”。与此组件相关的所有正在进行的订阅都已中止随着组件的变化角度。 所以在ngOnDestroy()方法中要求退订是没有意义的。

如果我将重点放在 http 方法上,这是在 [https://angular.io/guide/http] 中找到的解释。

直到您对该方法返回的可观察对象调用 subscribe() 后,HttpClient 方法才会开始其 HTTP 请求。 AsyncPipe 会自动为您订阅(和取消订阅)。

异步管道订阅 Observable 或 Promise 并返回它发出的最新值。当发出新值时,异步管道会标记要检查更改的组件。当组件被销毁时,异步管道会自动取消订阅以避免潜在的内存泄漏。

我们通常使用 unSubscribe() 的一些常见情况

  • 清除超时以停止执行
  • 从观察者数组中删除一些东西,这样它就不会再收到通知等等了。

但是是的,在某些情况下,您可能需要在 ngOnDestroy() 方法中取消订阅。但这里不需要。 浏览我提供的链接中的所有示例。它可能会更好地帮助你。希望我能有所帮助。

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2017-11-21
    • 2020-04-07
    • 2016-06-15
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多