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()
}
})
}
我有这样的代码。 基本上我的后端有一些限制,要加载所有数据,我必须通过传递最后评估的 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()
}
})
}