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