javascript - Angular retryWhen 与条件状态码

标签 javascript angular rxjs http-status-codes

我对 retryWhen 有疑问。

我正在做一个条形码扫描应用程序,要求是当状态代码为500时,我们将重试请求,如果为400,则将该条形码推送到数组中(列出错误400的条形码)。

我需要按照上面的要求运行 .retryWhen 并使用状态代码。 我的代码现在是这样的,但它总是在出现错误时重试并跳过 .subcribe,我需要处理错误 400,我只需要在状态代码为 500 时重试,使用 400然后将该条形码插入数组中。

let modelItem = {
   ...
};
this._pickAppSv.updateTicketStatus(modelItem, !endWave)
 .retryWhen((obs) => { // Retry when error status is 500, 10 times
  return obs
   .mergeMap(error => (error.status === 500) ? Observable.throw(error) : Observable.of(error))
   .take(9);
 })
 .subscribe(
  (resp: any) => {
   ...
  },
  (err) => {
   if (err.message === 'Bad Request') { // error 400
    this.errorList.push(modelItem);
   }
  }
 );

我查了很多资料,但似乎没有解决办法。非常感谢您的帮助。

最佳答案

Shashank的回答是正确的。但由于某种原因,我的 rxjs 版本无法与 .pipe 一起使用,所以我对其进行了一些更改。谢谢沙尚克。

this._pickAppSv.updateTicketStatus(modelItem, !endWave)
      .retryWhen((obs) => { // Retry when error status is 500, 10 times
        return obs
          .mergeMap((error) => {
            if (error.status === 500) {
              return Observable.of(error)
                     .delay(500)
            }
            if (error.status === 400) {
              this.errorList.push(modelItem);
              throw({error: error.message});
            }
            return Observable.throw({error: 'Error:' + error});
          })
          .take(9);
      })
      .subscribe({
        //do something
      });

关于javascript - Angular retryWhen 与条件状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367339/

相关文章:

Angular 4 ngComponentOutlet 加载动态组件,但未呈现路由内容

实现 ControlValueAccessor 的 Angular 2 指令不会在更改时更新 'touched' 属性

javascript - 使用 RxJS 如何缓冲函数调用,直到另一个异步函数调用已解决

javascript - 如何将现有文本片段放入新创建的元素节点中?

Javascript弹出框不会弹出

javascript - 调用 Node 模块时未定义不是函数

javascript - 从 Angular 范围内的数组获取所有对象

Angular 2 路由在部署到 Http 服务器时不起作用

javascript - 如何通过一个区间从服务器获取数据?

rxjs - 从多个来源获取最后发出的对象