使用 rxjs 连接未确定的 api 调用

Concat undetermined api call using rxjs

我想查询 Api 那 returns dada 和 next 包含下一个 url 要调用的项目。

next为null时表示所有数据发送完毕

  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;
      })
    );
  }

实际上组件只得到第一次调用而没有得到第二次调用。

我怎样才能很好地链接 api 调用并连接结果?

您可能想使用 expand 运算符。它是递归的——每个响应都调用操作员回调。您可以使用 toArray 将所有响应收集为一个数组。您可以使用 scan 或不使用运算符来在加载其他运算符时立即处理结果。

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))
    );
  }