【发布时间】:2017-03-24 13:51:31
【问题描述】:
我有一个 REST 端点,它返回一个项目列表,一次最多 1000 个项目。如果项目超过 1000 个,则响应的 HTTP 状态为 206,并且有一个 Next-Range 标头,我可以在下一个请求中使用它来获取更多项目。
我正在开发Angular 2 应用程序,并尝试使用Http 和Observable 来实现它。我的问题是我不知道如何合并多个Observables,具体取决于有多少页项目,最终返回一个Observable,我的组件可以订阅。
以下是我当前的 TypeScript 实现:
// NOTE: Non-working example!
getAllItems(): Observable<any[]> {
// array of all items, possibly received with multiple requests
const allItems: any[] = [];
// inner function for getting a range of items
const getRange = (range?: string) => {
const headers: Headers = new Headers();
if (range) {
headers.set('Range', range);
}
return this.http.get('http://api/endpoint', { headers })
.map((res: Response) => {
// add all to received items
// (maybe not needed if the responses can be merged some other way?)
allItems.push.apply(allItems, res.json());
// partial content
if (res.status === 206) {
const nextRange = res.headers.get('Next-Range');
// get next range of items
return getRange(nextRange);
}
return allItems;
});
};
// get first range
return getRange();
}
但是,这不起作用。如果我理解正确,Observable 将作为初始 Observable 的值返回,而不是项目数组。
【问题讨论】:
标签: angular rxjs observable angular2-http