首页 文章

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

提问于
浏览
1

我有一个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,其具有在HTTP请求成功时解析的标准行为,并在HTTP请求失败时拒绝 .

我需要做的是在这个史诗中解决这个承诺之后做额外的工作,因为我需要在初始 SAVE_ACTION 动作的有效载荷和HTTP响应的有效载荷中包含数据 .

因为中间件也会在完成底层HTTP请求时调度操作,所以编写一个额外的史诗可以很容易地完成我需要在一个独特的史诗中做的额外工作,但我无法访问初始的有效负载 SAVE_ACTION ,所以我到目前为止找到了一条路 . 我找到了像this one这样的在线帖子,这些信息非常丰富,但仍然没有解决等待发送行动的问题,而不是简单的可观察性 .

1 回答

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

相关问题