Rx - объединить новый ввод с предыдущим выводом - PullRequest
0 голосов
/ 29 октября 2018

У меня есть следующий случай редуктора:

    class XYZ Reducer(private val state: BehaviorRelay<State>) {

     override fun invoke(events: Observable<Any>): Observable<State>  =   
              events.ofType(Event::class.java).map { event ->
              handleFieldClicked(event, state.value)
    }

Как редуктор требует 2 инфо:

  1. Новое событие
  2. Предыдущее состояние

Я передаю реле состояния состояний на редуктор. Я попытался найти способ получить доступ к предыдущему состоянию и текущему событию в map{}, например, сканирование, все, что я нашел, было scan(), которое дает текущее событие и предыдущее событие в качестве аргументов.

Вы знаете какой-нибудь лучший способ (оператор?), Чем передача behaviorRelay как состояния напрямую?

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете объединить flatMap() с take(1):

class XYZ Reducer(private val state: BehaviorRelay<State>) {
    override fun invoke(events: Observable<Any>): Observable<State>  =   
        events.ofType(Event::class.java).flatMap { event ->
            state.take(1).map { state ->
                handleFieldClicked(event, state)
            }
        }
}
...