Я использую канал 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
в этом случае, так как Observable, созданный из Promise, будет только:
Этот ответ также может быть полезен для чтения: Отменяет ли toPromise() подписку на Observable?
Спасибо за подтверждение, и особенно спасибо за ссылку
Вам не нужно использовать
take(1)
,from()
выдаст уведомлениеcomplete
сразу после разрешения промиса. github.com/ReactiveX/rxjs/blob/master/src/internal/observablee/…