我认为这是一个非常常见的用例,但无法找到一个明确为我提供的例子。
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
};
};
任何帮助?
答案 0 :(得分:1)
如果您要返回一个可观察对象,则需要使用flatMap
代替map
:
.flatMap(fetchRes => {
console.log("fetch sub token", fetchRes);
let actions = [getOpenTriviaTokenSuccess(fetchRes.token), getOpenTriviaQuestions()];
return Observable.from(actions);
})