한 번에 최대 1000 개의 항목 목록을 반환하는 REST 끝점이 있습니다. 항목이 1000 개 이상인 경우 응답의 HTTP 상태는 206이고 더 많은 항목을 가져 오는 다음 요청에 사용할 수있는 Next-Range
헤더가 있습니다.각도 2 Http, Observables 및 재귀 요청
난 각도 2 응용 프로그램에 노력하고있어 이것을 Http
과 Observable
으로 구현하려고합니다. 내 문제는 내가 모른다는 것입니다. Observable
얼마나 많은 페이지의 항목이 있는지에 따라 이 마침내 내 구성 요소를 구독 할 수있는 Observable
중 하나를 반환합니다. 내 현재 타이프 라이터 구현에있어 어디 여기
는 다음과 같습니다
// 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
의 초기 값으로 반환됩니다.
어떤 이유로이 기능이 올바르게 작동하지 않습니다. 간단한 코드 샘플을 추가하고 여기에 더 많은 의견을 남깁니다. https : //gist.github.com/roxeteer/76789931e82f38061b0d33d4fdc06c70 –
JSBIN을 코드로 업데이트하려고 시도했지만 예상대로 작동하지 않는 것 같습니다 (HTTP 조롱에 대한 사소한 변경 사항). http://jsbin.com/nosohom/edit?js,console 이것이 작동하지 않는다면, 잘못된 jsbin 예제를 제게 제공 할 수 있습니까? – KwintenP
이상한. 코드가 비슷해 보이지만 각도 2에서 다르게 작동했습니다. 구독자를 수정하여 "완료된"핸들러를 사용하도록 수정했습니다. 내 대답보기 : http://stackoverflow.com/a/40543794/587337 –