Используя RxJs, вы бы отказались от подписки при использовании from(myPromise)?

Я использую канал async в Angular или takeUntil(...) для компонентов, используя:

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

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

}

Но мне всегда было интересно, что мне нужно делать при использовании from(myPromise). Обещания дают только один результат, но я преобразовал его в наблюдаемое, поэтому кажется, что если я сделаю эквивалентный метод, который вместо этого предоставляет наблюдаемое, я должен использовать 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
  }

Должен ли я использовать take(1) на from(myPromise)? Я думал об этом некоторое время на случай, если это вызовет утечку памяти, но я не могу найти статью, подтверждающую, что я должен это сделать.

Кроме того, если есть лучший способ сделать такие наблюдаемые эквивалентные методы, я всегда открыт для предложений.

Вам не нужно использовать take(1), from() выдаст уведомление complete сразу после разрешения промиса. github.com/ReactiveX/rxjs/blob/master/src/internal/observable‌​e/…

martin 20.12.2020 11:16

Спасибо за подтверждение и ссылку

mtpultz 20.12.2020 21:07
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам никогда не нужно использовать take в этом случае, так как Observable, созданный из Promise, будет только:

  • Выдать 1 значение и завершить, если Promise разрешается.
  • Ошибка, если обещание отклоняется.

Этот ответ также может быть полезен для чтения: Отменяет ли toPromise() подписку на Observable?

Спасибо за подтверждение, и особенно спасибо за ссылку

mtpultz 20.12.2020 21:06

Другие вопросы по теме