javascript - 将两个 Observable 合并为一个相同类型的 Observable
问题描述
我有两个相同类型的 Observable,我想将它们合并为一个 observable 并删除重复项。
到目前为止,我基本上尝试了所有 rxjs 运算符,但没有一个能满足我的需要。见附图:很多 rxjs 操作符改变了结果 observable 的类型。
const a: Observable<Foo[]> = ...
const b: Observable<Foo[]> = ...
这是我检索一些数据的两个调用。
现在最接近的两个操作:
combineLatest(a, b);
这个创建了一个具有两个索引的新数组,a 的结果将进入索引 0,b 的结果将进入索引 1。我不能这样使用它。
const c = a.pipe(mergeMap(a1 => b.pipe(map(a2 => [...a1, ...a2]))));
这个差一点就明白了。这里的问题如下:假设 a 返回 2 个结果(示例值:1 和 2)并且 b 也返回 2 个结果(示例值:2 和 3)。所以“2”是重复的,它不应该出现在结果 observable 中两次。
有谁知道运算符的组合,以便我可以组合两个可观察对象并删除重复项?
解决方案
由于您的 observables 是 http 调用,我假设它们在发出后完成。你可以使用 forkJoin 来组合它们:
const combine= forkJoin(a, b).pipe(
map(([a, b]) => a.concat(b))
);
如果您的 observables 没有完成,请使用 combineLatest:
const combine= combineLatest(a, b).pipe(
map(([a, b]) => a.concat(b))
);
推荐阅读
- java - 如何在 Eclipse 2020-12 中启用 Java 14 的预览功能?
- python - 无法在另一台机器上重现光谱聚类结果
- python - 电报机器人中的异步功能
- javascript - 使用地图的Javascript没有提供所需的输出,因为它没有对它们进行分组
- reactjs - 推断我的对象接口以键入“对象”
- file - CPP 试图将 HEX 写入可执行文件
- javascript - 当一个流依赖于另一个流时,如何处理 node.js 流的情况?
- android - 使用 Jetpack Compose 导航时无法创建视图模型实例
- c# - c#rest api只获取第一个值参数列表
- elasticsearch - 弹性搜索查询 聚合上的分页帮助