Redux可观察史诗中的IF

时间:2018-11-19 12:22:53

标签: rxjs observable redux-observable

我有一个史诗,可以捕获每次获取状态的信息(只是状态中的项,例如state.process:{status:fail,成功,inWork},而不是请求状态,如200、500等)。 当状态==成功时(通过从状态获取状态),我需要调度其他动作,例如SET_STATUS_SUCCESS

const getStatus = (action, state) =>
    action.pipe(
        ofType(GET_STATUS),
        withLatestFrom(state),
        mergeMap(([action, state]) => {
            const { status } = state.api.process; //here is what i need, there is no problem with status.
            if (status === "success") {
              return mapTo(SET_STATUS_SUCCESS) //got nothing and error.
}
        })
    );

现在我收到错误消息:

  

未捕获的TypeError:您提供了'function(source){return   source.lift(new MapToOperator(value)); }'预计会出现流。   您可以提供一个Observable,Promise,Array或Iterable。       在subscribeTo(subscribeTo.js:41)

我该怎么办?我尝试只返回setStatusSuccess操作,但它也无法正常工作。

1 个答案:

答案 0 :(得分:2)

您需要从传递给mergeMap的函数中返回一个可观察值。试试这个:

const getStatus = (action, state) =>
  action.pipe(
    ofType(GET_STATUS),
    withLatestFrom(state),
    mergeMap(([action, state]) => {
      const { status } = state.api.process;

      if (status === 'success') {
        return of({ type: SET_STATUS_SUCCESS });
      } else {
        return EMPTY;
      }
    }),
  );

ofEMPTY是从rxjs导入的。