如何解决在使用 from(myPromise) 时,使用 RxJs 会取消订阅吗?
我在 Angular 中使用 async
管道,或在组件上使用 takeUntil(...)
使用:
export class BaseComponent implements OnDestroy {
ngUnsubscribe = new Subject<void>();
ngOnDestroy(): void {
this.ngUnsubscribe.next();
this.ngUnsubscribe.complete();
}
}
但是,我一直想知道在使用 from(myPromise)
时我需要做什么。 Promises 只提供一个结果,但我已将其转换为 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
}
我应该在 take(1)
上使用 from(myPromise)
吗?我已经考虑了一段时间以防这会导致内存泄漏,但我找不到确认我应该这样做的文章。
此外,如果有更好的方法来制作这些可观察的等效方法,我总是乐于接受建议。
解决方法
在这种情况下,您永远不需要使用 take
,因为从 Promise 创建的 Observable 只会:
- 如果 Promise 解决,则发出 1 个值并完成。
- 如果 Promise 拒绝则出错。
这个答案也可能有助于阅读:Does toPromise() unsubscribe from the Observable?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。