在我的应用程序中有大量的多步骤过程。想象一下类似的事情
“打开文档进行编辑,以多种方式之一更改文档的状态。 用户是 a) 被告知该文件将因该操作而更改,并且
b) 必须(有时)决定以何种方式更改文档。”
由于这个过程本质上是异步的,所以我们将整个过程放在一系列
pipe
语句中。
现在回答我的问题。如果用户决定停止执行更新,我正在寻找一种随时停止链的方法。 目前我有 switchMap 语句返回一个自我完成的 Observable(如下面标记行所示)。
但我想知道是否有另一种方法,所以关闭 Observable,这样就不会内存泄漏,而不会在我的代码中到处都有多个主题,以便尝试一个可信的
ngUnsubscribe$
-东西。
类似:
openWarnUserDialog().afterClosed().pipe(
switchMap((proceed: boolean) =>
proceed ?
openChooseChangeDialog().afterClosed() :
new Observable<MyType>(sub => sub.complete()), // <---
switchMap(chosenChange => this.service.updateDocumentState(chosenChange))
).subscribe( ... );
takeUntilDestroyed
,以确保可观察对象被取消订阅并且不会发生内存泄漏,一旦组件/指令/服务被销毁,它就会被销毁!