我需要能够调用一个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;
});
});
}