Redux-observable:在一些数据获取史诗完成后调用辅助函数

这些男孩

用户登录后,会进行多次 api 调用以加载用户数据。这些 calla 完成后,用户将被重定向到其配置中指定的登录页面。

3 个 api 调用可以同时获取,但是重定向必须等到获取完成。我已经在下面展示了我的尝试。

所有 api 调用都按预期工作并将获取的数据存储在 Redux 中,因此(我认为)问题在于 loadUserEpic,它管理整个过程并调用重定向函数。我将如何更好地构建这部史诗以实现我想要的?

import { userRedirect } from 'ui/client/helpers/userRedirect';

const loadUserEpic = action$ =>
  action$.ofType('LOAD_USER').pipe(
    mergeMap(() =>
      Observable.of(
        {
          type: 'FETCH_USER_CONFIG'
        },
        {
          type: 'FETCH_USER_MODULES'
        },
        {
          type: 'FETCH_USER_DIVISION'
        },
        userRedirect()
      )
    )
  );

const userConfigEpic = action$ =>
  action$.ofType('FETCH_USER_CONFIG').mergeMap(() =>
    fromPromise(axios.get(`/me/configuration`))
      .map(response => ({
        type: 'FETCH_USER_CONFIG_SUCCESS',
        data: response.data
      }))
      .catch(error =>
        Observable.of({
          type: 'FETCH_USER_CONFIG_ERROR',
          error
        })
      )
  );

const userModulesEpic = action$ =>
  action$.ofType('FETCH_USER_MODULES').mergeMap(() =>
    fromPromise(axios.get(`/me/modules`))
      .map(response => ({
        type: 'FETCH_USER_MODULES_SUCCESS',
        data: response.data
      }))
      .catch(error =>
        Observable.of({
          type: 'FETCH_USER_MODULES_ERROR',
          error
        })
      )
  );

const userDivisionEpic = action$ =>
  action$.ofType('FETCH_USER_DIVISION').mergeMap(() =>
    fromPromise(axios.get(`/division/`))
      .map(response => ({
        type: 'FETCH_USER_DIVISION_SUCCESS',
        data: response.data
      }))
      .catch(error =>
        Observable.of({
          type: 'FETCH_USER_DIVISION_ERROR',
          error
        })
      )
  );
托马斯·穆拉奇克

首先触发所有三个操作来获取数据:

const loadUserEpic = action$ =>
  action$.ofType('LOAD_USER').pipe(
    mergeMap(() =>
      Observable.of(
        {
          type: 'FETCH_USER_CONFIG'
        },
        {
          type: 'FETCH_USER_MODULES'
        },
        {
          type: 'FETCH_USER_DIVISION'
        },
      )
    )
  );

现在等待每个操作完成并以某种方式检查您是否拥有所需的一切:

const redirectEpic = (action$, store) => 
  action$.ofType(
    'FETCH_USER_CONFIG_SUCCESS',
    'FETCH_USER_MODULES_SUCCESS',
    'FETCH_USER_DIVISION_SUCCESS'
  ).pipe(
    mergeMap(() => {
      const state = store.getState(); 
      const iHaveConfig = isConfigFetched(state);
      const iHaveModules = areModulesFetched(state);
      const iHaveDivisions = areDivisionsFetched(state);

      if(iHaveConfig && iHaveModules && iHaveDivisions) {
        return useRedirect();
      }

      return Observable.empty();
    })
  )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以确定史诗何时在 Redux Observable 中完成?

来自分类Dev

React + Redux在组件更新后做一些事情

来自分类Dev

在react redux和saga中调度完成后获取状态变量?

来自分类Dev

Redux如何在Ajax完成后打开新窗口

来自分类Dev

重定向完成后如何分派动作(Redux)?

来自分类Dev

ReactJs Redux 数据获取

来自分类Dev

我在用React从Redux调用状态时遇到一些麻烦

来自分类Dev

等待动作创建者完成后再调用其他动作创建者-Redux thunk

来自分类Dev

你如何使用 redux get 函数更新一些状态?值未在片场正确更新

来自分类Dev

Redux-persist 如何持久化一些状态

来自分类Dev

React redux saga - 得到一些奇怪的行为

来自分类Dev

如何在史诗 redux-observable 的 componentDidMount 方法中设置状态数据

来自分类Dev

jQuery动画完成后做一些事情

来自分类Dev

jstree - 在 AJAX 完成后做一些事情

来自分类Dev

Redux无效的挂接调用

来自分类Dev

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

来自分类Dev

如何使用TypeScript键入Redux-Observable的史诗动作

来自分类Dev

Redux-Observable 单个史诗中的多个动作

来自分类Dev

使用Redux操作获取数据

来自分类Dev

React - 无法从 Redux 获取数据

来自分类Dev

Redux数据依赖管理

来自分类Dev

关系数据Redux

来自分类Dev

反应redux渲染数据

来自分类Dev

可观察到的Redux:操作完成后组件如何订阅以做出反应?

来自分类Dev

React.js,在所有getDownloadURL函数完成后打印一些内容

来自分类Dev

是否可以在 curl 请求完成后注册一些回调函数来释放资源?

来自分类Dev

redux-observable 调度动作

来自分类Dev

useEffect()链函数调用未获取更新的redux状态

来自分类Dev

如何创建一个 redux-observable 史诗,在做任何事情之前等待 2 个动作

Related 相关文章

  1. 1

    可以确定史诗何时在 Redux Observable 中完成?

  2. 2

    React + Redux在组件更新后做一些事情

  3. 3

    在react redux和saga中调度完成后获取状态变量?

  4. 4

    Redux如何在Ajax完成后打开新窗口

  5. 5

    重定向完成后如何分派动作(Redux)?

  6. 6

    ReactJs Redux 数据获取

  7. 7

    我在用React从Redux调用状态时遇到一些麻烦

  8. 8

    等待动作创建者完成后再调用其他动作创建者-Redux thunk

  9. 9

    你如何使用 redux get 函数更新一些状态?值未在片场正确更新

  10. 10

    Redux-persist 如何持久化一些状态

  11. 11

    React redux saga - 得到一些奇怪的行为

  12. 12

    如何在史诗 redux-observable 的 componentDidMount 方法中设置状态数据

  13. 13

    jQuery动画完成后做一些事情

  14. 14

    jstree - 在 AJAX 完成后做一些事情

  15. 15

    Redux无效的挂接调用

  16. 16

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

  17. 17

    如何使用TypeScript键入Redux-Observable的史诗动作

  18. 18

    Redux-Observable 单个史诗中的多个动作

  19. 19

    使用Redux操作获取数据

  20. 20

    React - 无法从 Redux 获取数据

  21. 21

    Redux数据依赖管理

  22. 22

    关系数据Redux

  23. 23

    反应redux渲染数据

  24. 24

    可观察到的Redux:操作完成后组件如何订阅以做出反应?

  25. 25

    React.js,在所有getDownloadURL函数完成后打印一些内容

  26. 26

    是否可以在 curl 请求完成后注册一些回调函数来释放资源?

  27. 27

    redux-observable 调度动作

  28. 28

    useEffect()链函数调用未获取更新的redux状态

  29. 29

    如何创建一个 redux-observable 史诗,在做任何事情之前等待 2 个动作

热门标签

归档