Angular RxJs - 将先前的响应数据传递给下一个请求的顺序 HttpRequests

Angular RxJs - sequential HttpRequests with passing previous response data to next request

我有这样的代码。 基本上我的后端有一些限制,要加载所有数据,我必须通过传递最后评估的 uuid 来遍历所有页面。

private getOrdersElements$(uuid: string): Observable<OrderElement[]> {
var lastEvaluatedUuid = "INIT";
const elements: OrderElement[] = [];
const o = new Observable<OrderElement[]>(observer => {
  do {
    this.http.get<OrderElementsWithLimitDTO>(`${this.appConfigService.BackendUrl}/api/constructions/${uuid}/constructionOrdersElementsWithLimit/${lastEvaluatedUuid}`)
      .pipe(take(1))
      .subscribe((elementsResponseDTO: OrderElementsWithLimitDTO) => {
        elementsResponseDTO.ordersElements.forEach(e => {
          elements.push(e);
          lastEvaluatedUuid = elementsResponseDTO.lastEvaluatedUuid;
        });
      });
  }
  while(lastEvaluatedUuid);
  observer.next(elements);
  observer.complete();
});
return o;

}

但是此代码不起作用,因为循环一直在创建新请求,直到 lastEvaluatedUuid 没有值。

如何以这种方式编码,以便在收到上一个响应后创建下一个请求,以便我可以在下一个请求中使用上一个响应的 lastEvaluatedUuid 值?

-亚采克

你可以简单的用递归来实现这一生

lastEvaluatedUuid = "INIT";
elements: OrderElement[] = []

getData(){
 this.http.get.pipe(take(1))
  .subscribe(res =>{
      this.elemets = [...this.elemnts,...res.elemnts]
      this.lastEvaluatedUuid = res.lastEvaluatedUuid
    if(your condition is true){
      this.getData()
     }
   })
}