RxJS等待流中的所有ajax请求

时间:2017-04-19 09:30:28

标签: typescript rxjs

我有以下代码,我在第一个调用一个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);
    });

1 个答案:

答案 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 => ...)