Angular RxJs-将上一个响应数据传递给下一个请求的顺序HttpRequest



我有这样的代码。基本上,我的后端有一些限制,为了加载所有数据,我必须通过传递上次评估的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值?

-Jacek

您可以像一样简单地使用递归来实现这一点

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

最新更新