Rxjs Redux可观察,在获取后分配两个操作

Rxjs Redux可观察,在获取后分配两个操作,rxjs,redux-observable,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 =&g

我想这是一个非常常见的用例,但找不到一个能为我清晰展示它的例子

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." })));
我看到正在进行提取,然后我要分派两个操作:

  • 获取令牌成功
  • 使用令牌获取数据
我将返回这两个操作的可观察值,但在控制台中出现以下错误:

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

我的行动是:

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

有什么帮助吗?

如果您要返回一个可观察对象,您需要使用
flatMap
而不是
map

.flatMap(fetchRes=>{
log(“获取子令牌”,fetchRes);
让操作=[getOpenTriviaTokenSuccess(fetchRes.token),getOpenTriviaQuestions()];
从(行动)中可观察到的回报;
})