我找不到任何规范文本来回答这个问题。我一直在使用这种代码模式(这是在 Angular 应用程序中的 TypeScript 中):
observeSomethingFun$: Observable<Fun>;
...
async loadsOfFun() {
const fun = await this.observeSomethingFun$.toPromise();
// I now have fun
}
Run Code Online (Sandbox Code Playgroud)
一般来说,Observables 需要取消订阅。async使用Angular管道时会自动发生这种情况,但在这种情况下会发生什么?toPromise发出一个值后是否取消订阅?
如果没有,我如何手动取消订阅?
更新:
事实证明@Will Taylor 下面的回答是正确的,但我的问题需要澄清一下。
在我的例子中,Observable 发出一个永无止境的流,这与 Angular 的HttpClient Observables 不同,它在发出一个值后完成。因此,在我的情况下,await根据泰勒的回答,我永远不会通过声明。
RxJS 使这个问题很容易解决。正确的说法是:
const fun = await this.observeSomethingFun$.pipe(first()).toPromise();
Run Code Online (Sandbox Code Playgroud)
RxJSfirst操作符将接收第一个值并取消订阅源 Observable。然后它会将该值发送给toPromise操作员,然后完成。
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |