angular - 源可观察对象完成时如何取消订阅内部可观察对象
问题描述
我正在尝试实现自动保存功能,其中我在 switchMap 运算符中使用了 switchMap 运算符,即多个嵌套的内部 observable
merge(...eventObservables)
.pipe(switchMap(({ syncWithServer }) => {
const source = of(cloneDeep(this.getData()))
.pipe(tap((data) => this.storageService.storeItem(data.id, {
data: data,
synced: false
})));
if (syncWithServer) {
return source.pipe(delay(5 * 1000),
switchMap((data) =>
this.apiService.saveData(data)
.pipe(tap(() => this.storageService.storeItem(data.RespondentId, {
data: data,
synced: true
})), tap((response) => response && this.setData(response['Data'], false)))));
}
return source;
}))
上面代码的问题是,当 eventObservables 有新值时,API 请求正在完成而不是取消。有人可以指出这里有什么问题。根据我的理解,当源 observable 被取消订阅(因为我使用了 switchMap 它将取消订阅以前的 observable)switchMap 也将取消订阅内部 observable。如果我理解错了,有人可以指出上面代码中的错误吗?
解决方案
推荐阅读
- swift - 当视图出现 SwiftUI 时打开带有状态的切换
- bash - 如何从 csv 文件中获取列的最后一个值。注意 - 如果文件只有标题,它应该将值设为 0,其余场景正在工作
- python - TensorFlow 只加载少量数据集
- javascript - 我如何制作一个不和谐机器人,当我在 Javascript 中键入某个短语时,它只会给我一个角色?
- excel - 在 Microsoft Excel 中将单行 3 个数值分成 3 列并获得平均值
- java - 带有注释类的 Java 反射不起作用
- mysql - 如何从具有不同列名的两个不同表中求和
- javascript - 如何维护 html 容器元素的数量并发送到 Servlet?
- python - 为什么我的 Python 导入不能在 VSCode 中工作?
- android - 如何使用@bubblewrap 构建 TWA?