在redux-observable中等待动作的异步调度

时间:2018-08-26 14:00:48

标签: redux redux-observable

我有一个史诗,它调度由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之类的在线帖子非常有用,但仍然没有解决等待操作分派的问题,而不是显而易见的问题。

1 个答案:

答案 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.
             })
         ),
    )
}