提问者:小点点

我们需要在Angular中取消订阅超文本传输协议调用吗?[重复]


可能是一个愚蠢的问题,但不容易找到答案。

在Angular应用程序中,我使用Rxjs进行超文本传输协议调用以获取数据并将其发布到服务器。假设我有一个服务MyService,其方法如下:

getData() {
  this.http
      .get("mybackendurl/mydata")
      .map(res => res.json())
      .subscribe(data => this.data = data);
}

所以,假设我在几个地方使用这个方法,每次我导航到一个页面时都使用这个方法。不管这样做是否方便,我的问题是,这不像一个开始和结束的Promise,据我所知,这会保持连接打开,直到源终止,所以我需要在每次完成请求时以某种方式取消订阅吗?

由于订阅是在服务中而不是在组件中完成的,因此服务不会被销毁,因此我担心我可能会创建多个订阅和连接,而不是重用同一个订阅和连接。

谢谢!


共1个答案

匿名用户

对于Http请求,您不需要取消订阅。它实际上完成了可观察性,因此您不会有任何内存泄漏。

您可以通过使用Subscription对象的add函数来检查这一点。当订阅被取消时,将调用此函数。您还可以通过将完成函数(第3个参数)传递给订阅函数来检查,该函数将在请求后调用,并表示可观察性已完成。

this.http
    .get("mybackendurl/mydata")
    .map(res => res.json())
    .subscribe(data => this.data = data)
    .add(() => console.log('Unsubscribed'));