如何在redux-observable中同时进行多个ajax调用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在redux-observable中同时进行多个ajax调用?相关的知识,希望对你有一定的参考价值。

我有一个字符串schemaNames = [schemaName1, schemaName2 ...]的数组,对于schemaNames中的每个元素,我想做一个宁静的调用,得到schema,我想把结果作为一个对象。

我想出这样的方式

export const fetchSchemasEpic = action$ =>
  action$.ofType(FETCH_SCHEMAS.REQUEST)
    .map(action => action.schemaNames)
    .switchMap(schemaNames => forkJoin(schemaNames
      .map(schemaName => ajax.getJSON('The API')))
      .map(doFetchSchemasFulfilled));

但似乎这个史诗会返回一个无序数组,因此我无法指定schemaName和schema之间的对应关系。任何人都可以帮助我吗?非常感谢。

答案

我找到了一个解决方案:

export const fetchSchemasEpic = action$ =>
  action$.ofType(FETCH_SCHEMAS.REQUEST)
    .map(action => action.schemaNames)
    .distinctUntilChanged((old, cur) =>
      old.length === cur.length &&
      old.every((v, i) => v === cur[i]))
    .switchMap(schemaNames => forkJoin(schemaNames
      .map(schemaName => ajax.getJSON(`RESR API`)
        .map((res) => {
          const ret = {};
          ret[schemaName] = res;
          return ret;
        })
        .catch(() => ({}))))
      .map(schemas => Object.assign({}, ...schemas))
      .map(doFetchSchemasFulfilled));

以上是关于如何在redux-observable中同时进行多个ajax调用?的主要内容,如果未能解决你的问题,请参考以下文章

在使用 redux-observables 开始另一个史诗之前,如何等待不同的史诗完成并更新商店?

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

如何在ngrx/effect(redux-observable)中调度多个动作?

在 redux-observable 中,我如何控制 reducer 或 epics 是不是首先对动作做出反应?

如何使用 TypeScript 为 Redux-Observable 的 Epic 输入 Actions

Redux-observable:当动作完成时组件如何订阅响应?