根据最后发出的值完成 Observable

问题描述 投票:0回答:1

在我的应用程序中有大量的多步骤过程。想象一下类似的事情

“打开文档进行编辑,以多种方式之一更改文档的状态。 用户是 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( ... );
rxjs
1个回答
0
投票

如果你使用的是 Angular,你可以在管道流中使用

takeUntilDestroyed
,以确保可观察对象被取消订阅并且不会发生内存泄漏,一旦组件/指令/服务被销毁,它就会被销毁!

© www.soinside.com 2019 - 2024. All rights reserved.