我有一个epic,它调度由redux中间件处理的操作,一旦该操作被调度,它将返回一个promise。这部史诗大致是这样的:
const myEpic = action$ =>
action$.pipe(
ofType(SAVE_ACTION),
switchMap(action => [
saveData(action.payload)
])
) 当SAVE_ACTION被分派时,它被epic接收,它分派由saveAction动作创建者创建的动作。
由此产生的操作被redux中间件(具体地说是redux-axios-middleware)截获,该中间件执行HTTP请求并将分派此类操作的结果转换为promise,promise的标准行为是在HTTP请求成功时进行解析,在HTTP请求失败时进行拒绝。
我需要做的是,在这个史诗中,一旦解决了这个承诺,就需要做额外的工作,因为我需要包含在初始SAVE_ACTION操作的有效负载和HTTP响应的有效负载中的数据。
由于中间件还会在底层超文本传输协议请求完成时分派操作,因此很容易编写额外的epic来完成我需要在不同的epic中完成的额外工作,但我将无法再访问初始SAVE_ACTION的有效负载,因此我正在尝试弄清楚是否可以在单个epic中处理所有这些操作,但到目前为止我还没有找到一种方法。我找到了像this one这样的在线帖子,内容非常丰富,但仍然没有解决等待动作调度的问题,而不是简单的可观察性。
发布于 2018-08-27 10:06:27
一种方法是像这样使用merge:
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.
})
),
)
}https://stackoverflow.com/questions/52026958
复制相似问题