gpt4 book ai didi

angular - RxJS 5 与 Angular 2 : Retry failed Observable but then forward error

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:12 26 4
gpt4 key购买 nike

当 HTTP 请求失败时,我想每隔 1 秒重试两次。如果它第三次再次失败,我想将该错误转发给观察者。我在最后一部分遇到了麻烦。

来自 DataService.get() 的 HTTP 请求

return this.http.get(url,options)
.retryWhen(errors => errors.delay(1000).take(2))
.catch((res)=>this.handleError(res));

订阅

this.dataSvc.get('/path').subscribe(
res => console.log(res),
err => console.error(err),
() => console.log('Complete')
);

我的服务器设置为始终返回错误(状态 400 Bad request)。

  • 我希望应用程序发出第 2 个请求,发出第 3 个请求,然后抛出要被 this.handleError()

    捕获的错误。
  • 实际发生了什么:应用程序发出第二个请求,发出第三个请求,然后 Observable 完成且没有错误(“完成”打印到控制台)

Angular 2 rc.6RxJS 5 beta 11Typescript 2.0.2

最佳答案

我用了the scan operator :

return this.http.get(url,options)
.retryWhen(errors => errors.delay(1000).scan((acc,source,index)=>{
if(index) throw source;
}))
.catch((res)=>this.handleError(res));

scan()的参数:

  • acc:一个累加器(想想 Array.reduce())。如果您修改并返回它,新值将在下次执行时作为acc参数提供
  • source:前一个操作(delay(),它本身从errors)发出的值(或异常)
  • index:当前发射值的索引(从零开始)

这会产生 3 个 HTTP 请求(不知道为什么;我本以为是 2 个)。在第三次失败时,它抛出 source——发出的错误——被 handleError()

捕获

关于angular - RxJS 5 与 Angular 2 : Retry failed Observable but then forward error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39465733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com