Typescript RxJS等待流中的所有ajax请求

Typescript RxJS等待流中的所有ajax请求,typescript,rxjs,Typescript,Rxjs,我有下面的代码,我调用第一个API来获取一组数据,并基于该数据调用另一个API来获取另一组数据。第二个api调用(以及我最终想要接收的数据)被调用x次,其中x是来自第一个api调用的数组中的条目数 我的问题是,可观察序列是否可能等待所有API调用完成,然后将数据作为一个数组返回,而不是每个请求返回一个数组 我可以通过将结果连接到一个临时数组中来解决这个问题,当调用完整的calback时,我拥有所有数据,但是否不可能仅在可观察序列中完成 let concat: Array<RepoTwoDa

我有下面的代码,我调用第一个API来获取一组数据,并基于该数据调用另一个API来获取另一组数据。第二个api调用(以及我最终想要接收的数据)被调用x次,其中x是来自第一个api调用的数组中的条目数

我的问题是,可观察序列是否可能等待所有API调用完成,然后将数据作为一个数组返回,而不是每个请求返回一个数组

我可以通过将结果连接到一个临时数组中来解决这个问题,当调用完整的calback时,我拥有所有数据,但是否不可能仅在可观察序列中完成

let concat: Array<RepoTwoData> = [];
this.repoOne
    .get()
    .flatMap((value: Array<RepoOneData>) => {
        return Observable.from(value);
    })
    .flatMap((value: RepoOneData) => {
        return this.repoTwo.get(value);
    })
    .subscribe((next: Array<RepoTwoData>) => {
        concat = concat.concat(next);
    }, () => {/* */}, () => {
        this.handleConcatData(concat);
    });
让concat:Array=[];
这是我的手机
.get()
.flatMap((值:数组)=>{
从(值)中可观察到的返回;
})
.flatMap((值:RepoOneData)=>{
返回this.repoTwo.get(值);
})
.subscribe((下一个:数组)=>{
concat=concat.concat(下一个);
}, () => {/* */}, () => {
这是handleConcatData(concat);
});
您可以使用操作员。这将获取流的所有元素,并在流完成时将其放入单个数组中。因此,如果您的元素是数组,那么您将得到一个数组数组

this.repoOne
    .get()
    .flatMap((value: Array<RepoOneData>) => {
        return Observable.from(value);
    })
    .flatMap((value: RepoOneData) => {
        return this.repoTwo.get(value);
    })
    .toArray()
    .subscribe(arrayOfRetrievedValues => ...)
this.repoOne
.get()
.flatMap((值:数组)=>{
从(值)中可观察到的返回;
})
.flatMap((值:RepoOneData)=>{
返回this.repoTwo.get(值);
})
.toArray()
.subscribe(ArrayFretrievedValues=>…)

谢谢你的建议。这是一个不错的解决方案,不完全是我想要的,但已经足够接近了。我可以在.toArray之后添加一个.map操作符,以处理数组的合并并将其作为一个数组输出。