如何在redux-observable中同时调用多个ajax?
How to make multiple ajax call concurrently in redux-observable?
我有一个字符串数组 schemaNames = [schemaName1, schemaName2 ...]
,对于 schemaNames
中的每个元素,我想进行 restful 调用,以获取 schema
,并且我想得到 object.
的结果
我是这样想的
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));
但似乎这部史诗将return一个无序数组,因此我无法指定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));
我有一个字符串数组 schemaNames = [schemaName1, schemaName2 ...]
,对于 schemaNames
中的每个元素,我想进行 restful 调用,以获取 schema
,并且我想得到 object.
我是这样想的
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));
但似乎这部史诗将return一个无序数组,因此我无法指定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));