首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待redux-observable中操作的异步分派

等待redux-observable中操作的异步分派
EN

Stack Overflow用户
提问于 2018-08-26 22:00:48
回答 1查看 875关注 0票数 1

我有一个epic,它调度由redux中间件处理的操作,一旦该操作被调度,它将返回一个promise。这部史诗大致是这样的:

代码语言:javascript
复制
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这样的在线帖子,内容非常丰富,但仍然没有解决等待动作调度的问题,而不是简单的可观察性。

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 10:06:27

一种方法是像这样使用merge:

代码语言:javascript
复制
 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.
             })
         ),
    )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52026958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档