Я исправил ваш код, как показано ниже ( исправлено: stackblitz )
ngOnInit() {
this.getByPageNext()
.subscribe(data => {
console.log(data);
});
}
get(url: string): Observable<any> {
return this.httpClient
.get(url)
.pipe(catchError(this.formatErrors));
}
formatErrors(error: any) {
console.error('error', error);
return throwError(error.error);
}
getByURL(url: string): any {
return this.get(url);
}
getByPageNext(): Observable<any> {
const url = 'https://5cf15627c936cb001450bd0a.mockapi.io/users2';
return this.getByURL(url)
.pipe(
expand((response: Array<any>) => {
if (response && response.length && response[0].next) {
return this.getByURL(response[0].next);
}
else {
return empty()
}
}),
map(obj => obj[0]),
reduce((acc, x: any) => acc.concat([x.data]), []),
);
}
, поэтому он объединит все данные в виде массива и рекурсивный вызов http работает нормально.
единственная проблема заключается в том, что при вызове 'https://5cf15627c936cb001450bd0a.mockapi.io/users' следующий URL будет http
, а не https
, что приведет к HttpError -> ProgressEvent.
Итак, я начал с формы https://5cf15627c936cb001450bd0a.mockapi.io/users2', а остальное работает нормально.Поэтому после того, как вы изменили серверную часть для исправления следующей ссылки, затем измените ее на свой исходный запрос.
Другой момент - ваш результат от api возвращается как массив, а не объект, поэтому я получаю доступ result[0]
Другим моментом было ваше условие возврата пустого () было наоборот