【发布时间】:2021-02-21 11:23:13
【问题描述】:
我是 rxjs 新手。
我正在尝试组合几个 observables 以从 rest api 获取数据列表并加载到 ngx-datatable
按照server-side paging on ngx-datatable example,我定义了一个PageData对象:
export class PagedData<T> {
data = new Array<T>();
page = new Page();
}
我的组件中有一个有效的 setPage 方法来检索我的用户列表:
setPage(pageInfo) {
this.page.pageNumber = pageInfo.offset;
this.pageObserver = this.userService.getPaged<User>(this.page).subscribe(pagedData => {
this.page = pagedData.page;
this.rows = pagedData.data;
});
}
现在我必须用其他一些逻辑来改进这个解决方案。 我的休息服务器中的用户对象具有这种形式:
{
"createdAt": "2021-02-20T13:06:23.911Z",
"firstname": "Roberto",
"id": 7,
"lastname": "Rossetti",
"links": [
{
"saleforces": "/users/7/saleforces"
}
],
"name": "robertorossetti",
"parent": null,
"parentId": null,
"updatedAt": "2021-02-20T13:06:23.933Z",
"users": []
}
所以我需要点击链接“/users/7/saleforces”来检索与我的用户相关的销售队伍。 在这里我被卡住了。
按照我找到的示例here,我尝试实现一个新的可观察对象,以这种方式扩展我的工作代码
public getPagedWithSaleForce2(page: Page, queryParams?: QueryStringParameters, options?: HttpOptions): Observable<PagedData<User>> {
return super.getPaged<User>(page, queryParams, options).pipe(
switchMap((pagedData: PagedData<User>) => {
if (pagedData.data.length > 0) {
return forkJoin(
pagedData.data.map((user: User) => {
const saleForceEndpoint = _.find(user.links, 'saleforces');
return this.getRaw<SaleForce>(saleForceEndpoint.saleforces).pipe(
map((saleForce: SaleForce[]) => {
user.saleForces = saleForce;
return (user);
})
);
})
);
} else {
return of(null);
}
})
);
}
显然这段代码不起作用。
那么,我如何用由他们的 saleForces 丰富的用户数组填充我的 pageData.data? 如何并行调用 saleForceEndpoint?
提前感谢您的帮助
【问题讨论】:
标签: angular rxjs angular-httpclient ngx-datatable