Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular/RxJS如何使用observable管道生成ajax调用层次结构,但返回单个响应?_Angularjs_Rxjs - Fatal编程技术网

Angularjs Angular/RxJS如何使用observable管道生成ajax调用层次结构,但返回单个响应?

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

我正在编写一个angular服务,它调用API端点来获取对象的一些基本元数据。我的难题是必须完成2个API调用才能获得我需要的所有数据。第一个API调用返回对象ID的列表,第二个API调用使用这些ID获取数据

我需要映射getFiles返回的entries数组,并调用另一个端点来获取数据。我不希望订阅者得到一堆不同的响应,并且必须在他们的终端上构建一个对象,我想要一个响应

//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
保留为一个原子操作