Rx-将新输入与先前输出合并

时间:2018-10-29 16:58:27

标签: kotlin rx-java2 reducers

我有以下减速器案例:

    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)
    }

Reducer需要2条信息:

  1. 新事件
  2. 以前的状态

我正在将状态的行为传递给reducer。 我试图找到一种方法来访问map{}中的先前状态和当前事件,例如扫描,我发现的全部是scan(),该变量将当前事件和先前事件作为参数。

您知道比直接将behaviorRelay传递为状态更好的方法(运算符吗?)

1 个答案:

答案 0 :(得分:1)

您可以将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)
            }
        }
}