我需要能够调用一个API,它返回获取所有数据所需的数据页数,然后将连接结果作为observable返回 . 同时,我想映射结果以选择返回的属性的子集 .

我要做的第一件事是调用API来获取第一页和总页数 . 然后我使用总页数来确定需要进行多少额外的API调用 . 然后我构造一个observable数组并使用forkJoin调用它们 .

我遇到的问题是forkjoin返回一个observable,但我是在map函数中调用它 . 结果,我的方法然后尝试返回Observable的Observable . 我需要以某种方式返回observable的结果 . 我试图在forkJoin结果上找到一种使用subscribe而不是map的方法,但是我的方法不会等待forkJoin结果发出 .

如何获得可观察的结果并将其从 Map 中返回?

public getData(): Observable<PartialResponse[]> {

    // get page 1
    this.getPagedData(1, maxPageSize).map((firstResponse: PagedDataResponse) => {
        let pgCt: number = firstResponse.totalPages;
        let result: PartialResponse[];

        //uses lodash to map the response to partialResponse
        result = _.map(firstResponse.data, ((r: FullResponse) => {
            return new PartialResponse(r.property1, r.property2);
        }));

        // create an array of observations for getting additional pages
        let additionalRequests = new Array<Observable<PagedDataResponse>>();
        if (pgCt > 1) {
            for (var i = 2; i <= pgCt; i++) {
                additionalRequests.push(this.getPagedData(i, maxPageSize));
            }
        }

        Observable.forkJoin(additionalRequests).map((datasets: IPagedData<AdministrationDto>[]) => {
            for (let responseX of datasets) {
                pgCt = responseX.totalPages;
                result = result.concat(_.map(responseX.data, ((r: FullResponse) => {
                    return new PartialResponse(r.property1, r.property2);
                })));
            }
            return result;
        });
    });

}