我正在使用Angular和RXJS,我需要一种方法一次发送多达5个AJAX请求,每个请求在中止请求并返回错误之前尝试3次。我大部分时间都让它工作,但是后续的请求得到了错误的有效负载。
示例:请求1以ID: 1作为有效负载的一部分发送。请求2-5也会被发送( ID分别设置为2-5)。请求1失败并再次尝试,但发送的ID为5(发送的最后一个请求)。
我试着将所有东西都关闭,以为这就是问题所在,但这并没有解决问题。实现这样的东西的正确方式是什么?这是我所拥有的一些伪代码,它接近于我所需要的。
for (let i = 0; i < 5; i++) {
timer(i * 1500).subscribe(() => {
this.sendVideoForProcessing();
});
}
// Use retryWhen to retry each request up to 3 times
private sendVideoForProcessing() {
const idToProcess = id; // More happenig behind the scenes to get the next Id from the queue.
let payload = {'data': this.finalOptions};
payload['data']['Id'] = idToProcess;
this.http
.post(`${this.baseUrl}`, payload)
.pipe(
retryWhen(
err$ => err$.pipe(
mergeMap((err, i) => {
if (i > 1) {
return throwError(err);
} else {
return timer(1000);
}
}))),
)
.subscribe(
(response: any) => {//do something with response},
(error: HttpErrorResponse) => {//error},
() => {
// Done running if successful
});
}
}
}发布于 2020-10-26 14:53:45
在每个函数调用中都使用相同的this.finalOptions引用,因此这应该可以解决这个问题:
let payload = {'data': { ...this.finalOptions }};https://stackoverflow.com/questions/64520602
复制相似问题