取消订阅/删除组件取消了我对BE-RxJS的挂起请求



最近几周,我一直在处理我的angular应用程序中的内存泄漏问题。有人告诉我,每个订阅都应该在某个地方有一个unsubscribe((调用,以防止任何相应的内存泄漏。因此,我在我的项目中添加了以下代码:

this.testSubscription?.unsubscribe();
this.testSubscription = {observable}.subscribe();

然而,我发现,如果我的组件被破坏,并且有一个正在进行的后端请求,它会被自动取消,因此会向用户显示意外的结果。

我为什么要使用这样一个概念?

  • 我有一个项目列表,可以在其中删除它们。删除可能需要一些时间,因此我实现了乐观响应,发送BE请求并从列表中删除内部组件

您认为在这种情况下,订阅变量是不必要的,可以删除吗?或者您是否建议采取任何其他方法来解决这个问题,而不会引入任何新的内存泄漏?

谢谢你的帮助!

避免这种情况的最简单方法是将逻辑转移到服务中。通过这种方式,您可以触发从服务中提取数据,当组件x或y自行销毁时,服务请求将继续,并且可以从服务本身检索数据。

ng generate service xxx将为您生成一个服务。

向组件构造函数中注入服务就像:private service: ServiceName一样简单。

然后,您可以在服务中使用一个方法,通过get请求获取数据。在app.component.ts上调用它,然后从导航栏或其他组件检索此数据。

祝你好运!

最新更新