在 Redux Observable 中保持史诗直到收到操作

Posted

技术标签:

【中文标题】在 Redux Observable 中保持史诗直到收到操作【英文标题】:Hold epic in Redux Observable until action is received 【发布时间】:2017-11-12 20:36:42 【问题描述】:

我是 rxjs 和 redux-observables 的新手

我有两部史诗:

export const appInit = action$ =>
  action$.ofType(actions.appInitRequest)
  .take(1)
  .switchMap(() => actions.fetchData())

export const navigation = ($action, getState) =>
  $action.ofType(actions.locationChange)
  .do(console.log)

App Init 触发操作以获取数据, 是否可以保持导航史诗直到获取数据完成?因此,如果收到导航操作并且未完成获取数据,我们将等到获取数据完成(调度 action.fetchDataSuccess)然后继续导航史诗流程?

我尝试了以下代码,但是 fetchDataSuccess 之后的每个请求都等待新的 fetchDataSuccess

export const navigation = ($action, getState) =>
  $action.ofType(actions.locationChange)
    .switchMap((payload: pathname) =>
      $action.ofType(action.fetchDataSuccess)
      .take(1)

【问题讨论】:

【参考方案1】:

尝试使用withLatestFrom:

export const navigation = ($action, getState) =>
  $action.ofType(actions.locationChange)
    .withLatestFrom(appInit)
    .filter(([locationChangeEvent, appInitEvent]) => 
      return /* check that app inited successfully */
    )
    .map(([locationChangeEvent]) => locationChangeEvent)
    .do(console.log)

【讨论】:

以上是关于在 Redux Observable 中保持史诗直到收到操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 redux-observable 史诗中链接 RxJS 可观察?

Redux-Observable 测试只读史诗

为啥我的 redux-observable 史诗没有被触发?

React redux-observable:以史诗般的方式进行顺序 API 调用

从 redux-observable 的史诗有条件地调度额外的动作

redux-observable 无法从发出的动作中捕获错误,错误会停止动作流