即使取消订阅,我的订阅仍在运行

问题描述 投票:0回答:1

我正在从订阅中获取响应,但是当我更改路线并返回到我的组件时,数据仍然存在。所以即使在 ngOnDestroy 中使用取消订阅后我仍然收到数据。

这是我的代码片段:

服务:

 sendDueDatetoPayments = new BehaviorSubject<any>(null);

    communicateDueDatetoPayments(msg) {
        this.sendDueDatetoPayments.next(msg);
      }

TS代码:

  dueDateSubscription: Subscription = new Subscription();

ngOnInit(){
this.listenDueDateRes();
}
    listenDueDateRes() {
        this.dueDateSubscription = this.sharedService.sendDueDatetoPayments.subscribe((res: any) => {
          console.log(res)
          if (res) {
           //do something
          }
        });
      }
    
    ngOnDestroy() {
        this.dueDateSubscription?.unsubscribe();
      }
angular rxjs subscription behaviorsubject unsubscribe
1个回答
0
投票

你应该写:

import { Component, OnInit, OnDestroy } from '@angular/core';

export class MyComponent implements OnInit, OnDestroy {
  ...
}

如果没有更多代码,很难说还要看看其他组件中相同

BehaviorSubject
的可能订阅

解决大多数取消订阅问题的快速方法是在组件中使用

Subject

import { Component, OnInit, OnDestroy } from '@angular/core';
...
export class MyComponent implements OnInit, OnDestroy {
  destroy$ = new Subject<true>()
  ...
  ngOnInit(){

    this.sharedService.sendDueDatetoPayments.pipe(
      takeUntil( this.destroy$ ), 
    ).subscribe((res: any) => {
      console.log(res)
      if (res) {
       //do something
      }
    });

  }

  ngOnDestroy () {

    this.destroy$.next( true );

  }
}
© www.soinside.com 2019 - 2024. All rights reserved.