我有以下代码,我在第一个调用一个API来获取一组数据,并根据该数据调用另一个API,我得到另一组数据。第二个api调用(以及我最终想要接收的数据)被称为x次,其中x是第一次API调用中数组中的条目数。
我的问题是,可观察序列是否有可能等待对repoTwo的所有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);
});
答案 0 :(得分:1)
您可以使用toArray
运算符。这将获取流的所有元素,并在流完成后立即将其放入一个单独的数组中。因此,如果您的元素是数组,您将获得一个数组数组。
this.repoOne
.get()
.flatMap((value: Array<RepoOneData>) => {
return Observable.from(value);
})
.flatMap((value: RepoOneData) => {
return this.repoTwo.get(value);
})
.toArray()
.subscribe(arrayOfRetrievedValues => ...)