【问题标题】:Conditionally combining two observables有条件地组合两个可观察对象
【发布时间】:2016-05-31 10:33:10
【问题描述】:

需要结合以下两个observables:

  • observable1 发出 { x: value1 }
  • observable2 发出 { y: value2 }

进入发出的observable3

  • { x: value1, y: value2 }observable1 触发时(value2observable2 发出的最后一个值)
  • { y: value }observable2 触发时

换句话说,对于observable1 发射,它应该表现得像combineLatest,对于observable2 发射,它应该像merge

有没有一种优雅的方式来做到这一点?

【问题讨论】:

  • Rx.Observable.merge(observable1.withLatestFrom(observable2), observable2)?
  • 你可以实现你自己的操作符。
  • @user3743222 谢谢,就是这样!事实证明,这很简单。如果您将此作为答案发布,我会接受。

标签: javascript reactive-programming rxjs observable frp


【解决方案1】:

你可以这样做:

observable3 = Rx.Observable.merge(observable1.withLatestFrom(observable2), observable2)

注意combineLatest 在这里不起作用,因为它会等待observable2 产生一个值。 withLatestFrom 无需等待即可从 observable2 中获取最新值。

我还建议您测试边缘情况:

  • observable2 尚未发出任何值(withLatestFrom 可能会阻塞并等待,文档中并不清楚)
  • observable2 已在您创建 observable3 之前完成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2020-02-11
    相关资源
    最近更新 更多