【发布时间】:2019-12-16 15:47:12
【问题描述】:
我有两个 observable 流,每个流在无限的时间段内发出一系列项目(类似于基于 DOM 的 click Observable 的行为方式)。我知道来自 Observable A (a$) 的项目将匹配来自 Observable B (b$) 的项目,但需要执行一些自定义逻辑来确定哪些项目匹配。
我试图完成这项工作,但我只能让第一对匹配,然后后续项目再也不会发出......
这是代码的摘录:
a$.pipe(
mergeMap(a => {
return b$.pipe(
filter(b => b.key.includes(a.subKey)), // custom matching logic goes here
take(1),
map(b => ({ a, b }))
);
})
)
.subscribe(({ a, b }) => {
console.log("do something with a and b", a, b);
});
请注意,both Observables 永远不会完成,因此如果来自a$ 的某些项目a 发出,则它的“对”可能尚未从b 发出。这就是为什么我在上面使用filter 而不是find。当我找到匹配的项目时,我可以完成内部 observable,因为该对已经匹配和处理。
请指教,我错过了什么?
【问题讨论】:
标签: rxjs