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

问题描述 投票:1回答:1

我有一个字符串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之间的对应关系。任何人都可以帮助我吗?非常感谢。

rxjs redux-observable
1个回答
0
投票

我找到了一个解决方案:

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));
© www.soinside.com 2019 - 2024. All rights reserved.