我有一个史诗,它调度由redux中间件处理的操作,一旦调度了该操作,该中间件就会返回promise。史诗大致如下:
const myEpic = action$ =>
action$.pipe(
ofType(SAVE_ACTION),
switchMap(action => [
saveData(action.payload)
])
)
派发SAVE_ACTION
时,史诗将其拾取,史诗派发由saveAction
动作创建者创建的动作。
此结果动作被redux
中间件(特别是redux-axios-middleware
)拦截,该中间件发出HTTP请求,并将分派该动作的结果转换为promise,该行为具有以下标准行为: HTTP请求成功,并在HTTP请求失败时拒绝。
在此史诗中,一旦兑现了诺言,我需要做的是额外的工作,因为我需要初始SAVE_ACTION
动作的有效负载和HTTP响应的有效负载中都包含数据。 / p>
由于中间件还在基础HTTP请求完成时分派操作,因此很容易编写一个额外的史诗,以完成我需要在一个单独的史诗中进行的其他工作,但是我将无法访问有效负载开头的SAVE_ACTION
中的所有内容都已删除,因此我想弄清楚是否可以在单个史诗中处理全部内容,但到目前为止,我还没有找到解决方法。我发现this one之类的在线帖子非常有用,但仍然没有解决等待操作分派的问题,而不是显而易见的问题。
答案 0 :(得分:0)
一种方法是像这样使用合并:
import { merge } from 'rxjs/observable/merge';
const myEpic = action$ => {
let initialPayload = null;
return merge(
action$.pipe(
ofType(SAVE_ACTION),
switchMap(action => {
initialPayload = action.payload;
return [saveData(action.payload)]
})
),
action$.pipe(
ofType(SAVE_ACTION_SUCCESS),
mergeMap(action => {
// Use initialPayload here.
})
),
)
}