【发布时间】:2019-02-01 06:18:14
【问题描述】:
我有一个史诗,它调度一个由 redux 中间件处理的动作,一旦动作被调度,它就会返回一个承诺。史诗大概是这样的:
const myEpic = action$ =>
action$.pipe(
ofType(SAVE_ACTION),
switchMap(action => [
saveData(action.payload)
])
)
当SAVE_ACTION 被调度时,它被epic 拾取,调度由saveAction 动作创建者创建的动作。
这个产生的动作被redux中间件(特别是redux-axios-middleware)截获,该中间件发出一个HTTP请求并将分派这种动作的结果转换为一个promise,它具有在HTTP请求成功时解析的标准行为,并且HTTP 请求失败时拒绝。
一旦承诺得到解决,我需要做的就是在这个史诗中做额外的工作,因为我需要包含在初始 SAVE_ACTION 操作的负载和 HTTP 响应的负载中的数据。
因为中间件还会在底层 HTTP 请求完成时调度操作,所以很容易编写一个额外的史诗来完成我需要在一个独特的史诗中完成的额外工作,但我无法访问有效负载不再是最初的SAVE_ACTION,所以我试图弄清楚这是否可以在一个史诗中全部处理,但到目前为止我还没有找到方法。我发现了像 this one 这样的在线帖子,它提供了很多信息,但仍然没有解决等待动作发送的问题,而不是一个普通的 observable。
【问题讨论】:
-
为什么你会有第二个中间件来处理你的 Ajax 调用,为什么不在
redux-observable中处理它们? -
您必须询问原始代码的作者@Anas :) 让我们假设这样的史诗比使用不同的方法触发 HTTP 请求更值得更改