English 中文(简体)
如何避免在使用主题时泄露记忆
原标题:How to avoid memory leaks while using Subject

这里,Im建立了可观测站,在一次点击事件上,Im没有提交。 虽然这一行动在使用可观测到的、如果我选择一个主题,则在使用可观测到的间隙时,无法从可观测到和清楚看出,但产生于在可观测的海狗生产过程中的匿名功能。 这导致记忆泄露。 如何处理这种情况?

    let newObs = new Observable<number>(observer=>{
      let i=0;
      let interval = setInterval((f:any)=>{
        i++;
        console.log(i+"in observer");
        observer.next(i)
      },1000)

      return ()=>{
        console.log("will be executed when unsubscribed or on error");
        clearInterval(interval);
      }
    })

    let sub = new Subject<number>();
    newObs.subscribe(sub);
    this.subscription2 = sub.subscribe({
      next: (data: number) => { console.log(data+" subscription2") },
      error: (error: string) => { console.log(error) },
      complete: ()=>{console.log( complete )}
    })

    this.subscription = sub.subscribe(f=>{
      console.log(f+"in subscription");
    },error=>{
      console.log(error)
    },()=>{
      console.log("complete")
    })

to unsubscribe subscriptions on click

ngAfterViewInit(){
    fromEvent(this.mapm.nativeElement, click ).subscribe(res=>{
      console.log(res)
      this.subscription.unsubscribe();
      this.subscription2.unsubscribe();
    },(error:any)=>{
      console.log(error)
    },()=>{
      console.log("completed!")
    })
  }
问题回答

我恳请你不要不表示你应该不报。

In other words, to stop the stream, you should do the following

// fist store the subscription to newObs in a variable
const subscription0 = newObs.subscribe(sub);

// then, at the click of the button, you should unsubscribe such subscription
subscription0.unsubscribe()

如果是的话,你就停止了以<代码>新Obs(即上游的真正来源)为代表的上游,除非有其他原因,否则不需要不提交其他订阅。

这里简单的stackblitz

如果用户不点击该元素,则Sames接着请你点击手。 在上述两种情况下,均可使用<代码>,不受干扰(<>/代码>操作者:

observable$.pipe(takeUntilDestroyed()).subscribe(...);

当部件被销毁时,这将自动不予提交。

如在构造中未使用,请提供<代码>。

private destroyRef = inject(DestroyRef);
...
observable$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(...);

关于安热字版和带;有16个可以使用一个在<代码>ngOnDestroy和< Until上的定制题目:

private destroy$ = new Subject<void>();
...
observable$.pipe(takeUntil(this.destroy$)).subscribe(...);
...
ngOnDestroy() {
  this.destroy$.next();
  this.destroy$.complete();
}




相关问题
Angular matSort not working on Date column by desc

Trying to sort the material table with date column , date format is MM/DD/YYYY ,h:mm A , order of date is not by latest date and time. Anything which i missed from the below stackblitz code. https:/...

热门标签