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

时间:2018-02-28 21:47:17

标签: rxjs redux-observable

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

1 个答案:

答案 0 :(得分: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));