我有一个api,它向我返回Array< string>的ID,给定原始ID(一对多).我需要对每个ID发出一个HTTP请求,以从api取回关联的数据.我无法弄清楚如何获取Observable< string []>并将其映射到Observable< DataType []>.
我想保持原始的可观察性,并尽可能使用运算符获得所需的结果.
由于可观察到的唯一项是数组,因此在这种情况下使用map操作符无效.
这是一些示例代码,与我尝试的实现类似.
getIds = (originalId: string) => {
return this.http.get<string[]>(url);
}
getDataFromIds = (originalId: string): Observable<DataType[]> => {
const ids$= this.getIds(originalId);
// Make http calls for each of the items in the array.
result = ids$.pipe();
return result;
}
解决方法:
这通常是switchMap运算符的用例,其中forkjoin运算符是您内部可观察到的.
getIds = (originalId: string) => {
return this.http.get<string[]>(url);
}
getDataFromIds = (originalId: string): Observable<DataType[]> => {
const ids$= this.getIds(originalId);
// Make http calls for each of the items in the array.
result = ids$.pipe(switchmap(ids => forkJoin(ids.map(id => this.getId(id))));
// map the array of ids into an array of Observable<DataType>, forkjoin them and switch into it.
return result;
}
这是假设getIds()调用将产生一个字符串ID列表,并且您有一些getId()函数需要一个字符串ID并返回一个可观察的DataType.