Angularjs Angular/RxJS如何使用observable管道生成ajax调用层次结构,但返回单个响应?
我正在编写一个angular服务,它调用API端点来获取对象的一些基本元数据。我的难题是必须完成2个API调用才能获得我需要的所有数据。第一个API调用返回对象ID的列表,第二个API调用使用这些ID获取数据 我需要映射getFiles返回的entries数组,并调用另一个端点来获取数据。我不希望订阅者得到一堆不同的响应,并且必须在他们的终端上构建一个对象,我想要一个响应Angularjs Angular/RxJS如何使用observable管道生成ajax调用层次结构,但返回单个响应?,angularjs,rxjs,Angularjs,Rxjs,我正在编写一个angular服务,它调用API端点来获取对象的一些基本元数据。我的难题是必须完成2个API调用才能获得我需要的所有数据。第一个API调用返回对象ID的列表,第二个API调用使用这些ID获取数据 我需要映射getFiles返回的entries数组,并调用另一个端点来获取数据。我不希望订阅者得到一堆不同的响应,并且必须在他们的终端上构建一个对象,我想要一个响应 //getFiles response { total_count: 2 offset: 0, li
//getFiles response
{
total_count: 2
offset: 0,
limit: 30,
entries: [{ id: '1' }, { id: '2' }]
}
getFiles() {
return this.http('call my endpoint')
}
getFileDetails(fileId) {
return this.http('call my endpoint using fileId')
}
getFilesWithDetails() {
this.getFiles()
.pipe(
// ????
);
}
我希望我的服务使用者调用
getFilesWithDetails
,并让它返回已删除的文件。这可能吗?您可以使用forkJoin
从文件ID数组中获取文件详细信息数组,然后可以使用mergeMap
将详细信息数组发送到可观察的流中:
从'rxjs/observable/forkJoin'导入{forkJoin};
getFilesWithDetails(){
返回此.getFiles().pipe(
合并映射(结果=>forkJoin(
result.entries.map(e=>this.getFileDetails(e.id))
))
);
}
forkJoin
接受一个观察值数组,并发出一个数组,其中包含每个传递的观察值的最后发出的值。您需要getFileDetails
接受数组而不是string@Hosar我计划使用switchMap或其他东西来迭代条目。我想将我的getFileDetails
保留为一个原子操作