使用 RxJs 你会在使用 from(myPromise) 时退订吗?

Using RxJs would you unsubscribe when using from(myPromise)?

我在 Angular 中使用 async 管道,或者 takeUntil(...) 在组件上使用:

export class BaseComponent implements OnDestroy {
  ngUnsubscribe = new Subject<void>();

  ngOnDestroy(): void {
    this.ngUnsubscribe.next();
    this.ngUnsubscribe.complete();
  }

}

但是,我一直想知道在使用 from(myPromise) 时我需要做什么。 Promises 只提供一个结果,但我已经将它转换为一个可观察的,所以感觉如果我制作一个提供可观察的等效方法而不是我应该使用 take(1) 或取消订阅取决于使用,因为我不不要总是直接订阅,而是在 exhaustMap(() => this.hasTokenExpired$().

中使用它
  public async hasTokenExpired(): Promise<boolean> {
    const token = await this.getToken();

    if (token) {
      return this.jwtHelper.isTokenExpired(token);
    }

    return true;
  }

  // Observable equivalent method:
  public hasTokenExpired$(): Observable<boolean> {
    return from(this.hasTokenExpired()); // Could pipe `take(1)` permanently
  }

我应该在 from(myPromise) 上使用 take(1) 吗?我已经考虑了一段时间,以防这导致内存泄漏,但我找不到确认我应该这么做的文章。

此外,如果有更好的方法来制作这些可观察到的等效方法,我随时愿意接受建议。

在这种情况下你永远不需要使用 take,因为从 Promise 创建的 Observable 永远只会是:

  • 如果 Promise 解决,则发出 1 个值并完成。
  • 如果 Promise 拒绝则出错。

这个答案可能对阅读也有帮助: