2016-05-31 5 views
2

нужно объединить следующие два наблюдаемых:Условно Объединение двух наблюдаемых

  • observable1 излучает { x: value1 }
  • observable2 излучает { y: value2 }

в observable3, который излучает:

  • { x: value1, y: value2 }, когда observable1 пожаров (value2 является последним значением, излучаемый observable2)
  • { y: value }, когда observable2 пожаров

Другими словами, она должна вести себя как combineLatest для observable1 испускает и, как merge для observable2 излучает.

Существует ли элегантный способ для этого?

+4

'Rx.Observable.merge (наблюдаемый1.withLatestFrom (наблюдаемый2), наблюдаемый2)'? – user3743222

+0

Вы можете реализовать собственный оператор. – sielakos

+0

@ user3743222 спасибо, вот и все! Оказывается, это довольно просто. Если вы опубликуете это как ответ, я приму это. –

ответ

3

Вы можете сделать:

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

Обратите внимание, что combineLatest не будет работать здесь, так как он будет ждать observable2 для получения значения. withLatestFrom берет последнее значение от observable2 без ожидания.

Я также рекомендую вам проверить на крайние случаи:

  • observable2 не излучается какое-либо значение (withLatestFrom может блокировать и ждать, пока не ясно из документации)
  • observable2 завершена до к вашему созданию observable3
Смежные вопросы