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

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

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 调用并连接结果呢?

回答1

您可能想要使用 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))
    );
  }