使用 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 拒绝则出错。
这个答案可能对阅读也有帮助:
我在 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 拒绝则出错。
这个答案可能对阅读也有帮助: