Redux-observable,在获取后调度两个动作

时间:2018-03-08 22:18:34

标签: rxjs redux-observable

我认为这是一个非常常见的用例,但无法找到一个明确为我提供的例子。

const openTriviaTokenEpic = (action$, store) =>
  action$
    .ofType(OT_GET_TOKEN)
    .mergeMap(action =>
      Observable.from(fetch(OPEN_TRIVIA_API + "api_token.php?command=request"))
        .flatMap(res => Observable.from(res.json()))
        .map(fetchRes => {
          console.log("fetch sub token", fetchRes);
          let actions = [getOpenTriviaTokenSuccess(fetchRes.token), getOpenTriviaQuestions()];
          return Observable.from(actions);
        })
    )
    .catch(result => Observable.of(getOpenTriviaTokenFailure({ message: "Unable to retrieve token for Trivia." })));

我看到我的抓取正在发生,然后我想发出两个动作:

  • 获取令牌成功
  • 使用令牌获取数据

我在这两个操作上返回一个Observable,但是在我的控制台中出现以下错误:

  

未捕获错误:操作必须是普通对象。使用自定义中间件进行异步操作。       在Object.performAction

我的行动就是这样:

export const getOpenTriviaTokenSuccess = payload => {
  console.log("payload", payload);
  return {
    type: OT_GET_TOKEN_SUCCESS,
    payload: payload
  };
};

任何帮助?

1 个答案:

答案 0 :(得分:1)

如果您要返回一个可观察对象,则需要使用flatMap代替map

.flatMap(fetchRes => {
  console.log("fetch sub token", fetchRes);
  let actions = [getOpenTriviaTokenSuccess(fetchRes.token), getOpenTriviaQuestions()];
  return Observable.from(actions);
})