Angular (Paginated API Request) Вы указали «неопределенный», где ожидался поток - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь сделать множественный запрос API и объединить все результаты в один массив, но моя проблема заключается в том, что один из API имеет разбитый на страницы ответ. Каждый раз, когда я пытаюсь подписаться на Observable, я получаю следующееошибка

«Вы указали« неопределенное »там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.» *

component.ts

ngOnInit() {
    this.appService.multipleDataRequest().subscribe(responseList => {
      console.log(responseList);
    // this.response1 = responseList[0];
    // this.response2 = responseList[1];
    // return this.arr = this.response1.concat(this.response2);
    });
 }

service.ts

fetch(url) {
    return this.http.get(url).pipe(
      mergeMap(
      data => {
        const page = data['next_page'];
        console.log(page);
        if (page !== null) {
          return this.fetch(page);
        }
      }
      )
    );
  }

    multipleDataRequest(): Observable<any[]> {
    // const news = this.http
    // .get<INews[]>('xxx');
    const articles = this.fetch('https://casounico.zendesk.com/api/v2/help_center/es/articles.json?');
    // return forkJoin([news, articles]);
    return forkJoin([articles]);

У меня тоже есть StackBlitz https://stackblitz.com/edit/angular-7j5v1z

Спасибо всем, любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 29 августа 2019

mergeMap принимает функцию, которая возвращает поток.но когда страница равна нулю, функция возвращает undefined, таким образом, ошибка.Чтобы устранить ошибку, просто:

data => {
        const page = data['next_page'];
        console.log(page);
        if (page !== null) {
          return this.fetch(page);
        } else return empty();  // return whatever you want, but it needs to be an array, observable or promise. 
      }
0 голосов
/ 14 февраля 2019

mergeMap принимает функцию, которая возвращает поток.но когда страница равна нулю, функция возвращает undefined, таким образом, ошибка.Чтобы устранить ошибку, просто:

data => {
        const page = data['next_page'];
        console.log(page);
        if (page !== null) {
          return this.fetch(page);
        } else return [];  // return whatever you want, but it needs to be an array, observable or promise. 
      }
...