提问者:小点点

角度超文本传输协议-取消订阅时请求流


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

Angular/RxJs我什么时候应该取消订阅

Angular 2订阅/取消订阅超文本传输协议调用情况下的可观察对象

我的任务是:角度(2)超文本传输协议-响应流,我需要在重新使用它之后或之前取消订阅吗?说,我有:

  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流检查在使用和清除之前是不必要的,甚至通过互联网打电话,我的用户不是一个有耐心的人。


共1个答案

匿名用户

这个答案只适用于您提到的情况,即get方法的超文本传输协议请求。

在角度https://angular.io/guide/observables的官方网站上,你会发现这样一句话:“订阅的消费者会收到通知,直到功能完成,或者直到他们取消订阅。”这意味着订阅方法在完成时通过角度本身获得了取消订阅。

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

上面的解释表明,你有一个额外的优势,取消订阅()方法,你订阅根据你的条件。

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

如果我将重点介绍超文本传输协议方法,这是[https://angular.io/guide/http]中的解释。

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

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

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

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

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