【发布时间】:2020-12-20 23:00:36
【问题描述】:
我在 Angular 中使用 async 管道,或者在组件上使用 takeUntil(...):
export class BaseComponent implements OnDestroy {
ngUnsubscribe = new Subject<void>();
ngOnDestroy(): void {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
}
但是,我一直想知道在使用from(myPromise) 时我需要做什么。 Promise 只提供一个结果,但我已将其转换为 observable,所以感觉就像我制作了一个提供 observable 的等效方法,而不是我应该使用 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(1),from()将在 Promise 解决后立即发出complete通知。 github.com/ReactiveX/rxjs/blob/master/src/internal/observable/… -
感谢您的确认和链接