当前位置: 首页 > 知识库问答 >
问题:

在没有ngOnDestroy的情况下,角度取消订阅不起作用

养鸿运
2023-03-14

如果在公共方法中使用而不是ngondestroy,则无法取消订阅。

如果有用于轮询API的rxjs可观察间隔。onNgInit I赞同以下可观察到情况:

Class .. {
   pollingSubscription: Subscription;

  ngOnInit() {
      startPolling();
  } 

  // when this gets triggered my polling subscription stops
  ngOnDestroy() {
      if (this.pollingSubscribe) {
          this.pollingSubscription.unsubscribe();
      }
  }

   startPolling() {
      const pollingInterval: Observable<any> = observable.interval(3000).startWith(0);
      this.pollingSubscription = pollingInterval.subscribe( _ => {
         this.store.dispatch(// trigger my Action);
      });
   }

   // when this gets triggered on a click event my polling subscription still keeps polling.
   stopPolling() {
       if ( // condition true) {
           // on this condition stop polling, FYI this line does get triggered,
           // but there is no effect, it still keeps subscribed.
           this.pollingSubscription.unsubscribe();
       }
   }
}

我在公共函数stopPolling()中做了什么错误的事情吗。如何在给定组件上仍处于活动状态的情况下取消订阅。

多谢了。

共有1个答案

罗昊明
2023-03-14

您的是否使用实现OnInit、ondestroy??如果您的类没有使用onDestroy实现,则nGonDestroy()将不会执行。这是ondestroy的官方链接

下面的片段展示了组件如何实现此接口以定义自己的自定义清理方法。

@Component({selector: 'my-cmp', template: `...`})
class MyComponent implements OnDestroy {
    ngOnDestroy() {
       // ...
    }
}
 类似资料:
  • 我最近才知道,我们必须在Angular破坏组件之前取消订阅,否则会造成内存泄漏。 我还知道,我们可以获得对订阅的引用,通过对该订阅调用unsubscribe方法,我们可以进行订阅。例如: 下面的方法会起作用吗?在HTTP调用的情况下,退订是最好的方法吗?

  • 问题内容: 我正在使用nodejs和expressjs框架从服务器下载文件’jsonFile.json’。 我正在使用以下代码 但这会导致对整个文件内容的响应。 我期望浏览器要我将文件保存在本地磁盘中。 如何将文件保存在本地磁盘中? 问题答案: 让Express设置正确的标头,然后执行以下操作: (doc) 编辑: 由于您是通过AJAX调用进行请求的,因此您必须更改设置,因为大多数(全部?)浏览器

  • 我想在没有用户角色的情况下实现Spring Security。我尝试了这个: 我想配置Spring Security以将数据库用于Rest api请求。我尝试了这个: 服务: 服务实现 实施: 我有两个问题: > 如何将Spring Security与用户角色一起使用? 如何使用用户名和密码验证请求。我看到,只能接受用户名。是否有其他方法来实现代码?

  • 在我的帐户页面/视图订阅中,在操作段落中,我有一个取消按钮,但没有挂起按钮。你知道这是否正常吗? 我跟踪了这个函数,它只返回取消数据:wcs_get_all_user_actions_for_subscription 谢谢你的帮助

  • 谁能帮我一下我做错了什么?或者是否有其他方法满足要求。

  • 我使用SockJS和StompJS,当我在浏览器中打开我的应用程序时,有时它会在连接到websocket之前尝试订阅一些主题。我希望主题订阅等待应用程序连接到websocket。 这就是我实现此代码的原因,我将其称为: 因此,我只在连接状态为时才订阅该主题,并且只有在客户端首次成功连接时才会调用该主题。 我想稍后从主题中取消订阅,所以我需要内部订阅返回的对象,我还需要内部订阅的消息。 我所实现的很