我需要在 Angular 中取消订阅吗

时间:2021-04-27 00:21:59

标签: angular ngrx ngrx-store

在 Angular 服务中,我有一个函数,它在某些事件上执行。在回调中,我需要从 ngrx 存储中获取一些数据并根据条件对其进行处理。这是一个简化的例子:

export class MyService {

  constructor(private store: Store<{}>) {

    Library.onSomethingChanged((val) => {
      this.store.select(mySelector).pipe(
        tap((valueFromStore) => {
          if (valueFromStore) {
            // do something
          }
        })
      ).subscribe()
    })

  }

}

我不太确定在这种情况下如何处理 subscribe。如果发生变化,我只需要管道执行一次。每次执行 onSomethingChanged 回调时都会创建一个新订阅吗?

1 个答案:

答案 0 :(得分:1)

我认为如果您使用 take(1),您将获得第一次发射并且订阅不会泄漏:

  Library.onSomethingChanged((val) => {
  this.store.select(mySelector).pipe(
    take(1),
    tap((valueFromStore) => {
      if (valueFromStore) {
        // do something
      }
    })
  ).subscribe()