首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有retryWhen的AJAX队列在后续请求中发送错误的有效负载

具有retryWhen的AJAX队列在后续请求中发送错误的有效负载
EN

Stack Overflow用户
提问于 2020-10-25 13:20:27
回答 1查看 24关注 0票数 0

我正在使用Angular和RXJS,我需要一种方法一次发送多达5个AJAX请求,每个请求在中止请求并返回错误之前尝试3次。我大部分时间都让它工作,但是后续的请求得到了错误的有效负载。

示例:请求1以ID: 1作为有效负载的一部分发送。请求2-5也会被发送( ID分别设置为2-5)。请求1失败并再次尝试,但发送的ID为5(发送的最后一个请求)。

我试着将所有东西都关闭,以为这就是问题所在,但这并没有解决问题。实现这样的东西的正确方式是什么?这是我所拥有的一些伪代码,它接近于我所需要的。

代码语言:javascript
复制
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
         });
      }
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-26 14:53:45

在每个函数调用中都使用相同的this.finalOptions引用,因此这应该可以解决这个问题:

代码语言:javascript
复制
let payload = {'data': { ...this.finalOptions }};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64520602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档