1

I would like query an Api that returns dada and next item that contains the next url to call.

When next is null it means that all data is sent.

  getData(url?: any) {
    if (!url) {
      url = `https....../geojson/geo/?srid=xxx&code=xx&jsonb_as_text=false&page_size=10`;
    }
    return this.httpClient.get(url, { headers }).pipe(
      flatMap((res: any) => {
        if (res.next) {
          this.getData(res.next);
        }
        return res;
      })
    );
  }

Actually the component only gets the first call but not the second.

How can I chain well api calls and concat the results then?

1 Answer 1

1

You probably want to use expand operator. It is recursive - each response calls the operator callback. You can use toArray to collect all responses as an array. You could use scan or no operator to process immediate results while the others are loading.

getData(url) {
   return this.httpClient.get(url, { headers })
}

getAllData() {
  
    const url = `https....../geojson/geo/?srid=xxx&code=xx&jsonb_as_text=false&page_size=10`;
    
    return this.getData(url).pipe(
      expand((res: any) => {
        if (res.next) {
          return this.getData(res.next);
        }
        return EMPTY;
      }),
      toArray(),
      map(responses => responses.flatMap(response => response.items))
    );
  }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.