【问题标题】:How to use filter with two Observables and return only one in rxjs如何使用带有两个 Observable 的过滤器并在 rxjs 中只返回一个
【发布时间】:2021-12-06 10:15:31
【问题描述】:

我有一部分代码检查两个可观察对象是否是最新的,如果是,则返回第二个可观察对象:

combineLatest([$source1, $source2]).pipe(
  filter(([source1, source2]) => source1.id === source2.id),
  map(([_, source2]) => source2)
);

如何简化代码?

【问题讨论】:

  • 你现在拥有的有什么问题?它看起来非常简短和富有表现力。您可以将其移动到自定义运算符中以将其隐藏在更大的上下文中,但除此之外我在这里没有什么可做的。
  • 我只是在考虑是否能够重构此代码。也许有一个 rxjs 操作员做这些事情,我不知道操作员。
  • 对我来说看起来很简单,至少我想不出更简单的方法。它是否像它应该做的那样工作?
  • 可能是groupBy(source => source.id, identity)。它不会完成完全相同的事情,但它也可能会做你想做的事。
  • 哦,你需要使用 concat 或类似的东西而不是 combineLatest 才能工作。

标签: javascript rxjs reactive-programming rxjs-pipeable-operators combinelatest


【解决方案1】:

您可以使用 iif rxjs 运算符,因此您可以根据条件订阅一个或另一个 observable

combineLatest([$source1, $source2]).pipe(
 mergeMap(
     ([s1, s2]) => iif(() => s1.id === s2.id, of(s2), EMPTY)
 )
).subscribe(console.log);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2018-11-26
    • 1970-01-01
    • 2021-02-02
    • 2019-12-25
    相关资源
    最近更新 更多