首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有角2的RxJS 5:重试失败,可观察到,但随后向前错误

具有角2的RxJS 5:重试失败,可观察到,但随后向前错误
EN

Stack Overflow用户
提问于 2016-09-13 08:44:06
回答 1查看 2.3K关注 0票数 2

当HTTP请求失败时,我想重试两次,间隔1秒。如果它第三次失败,我想把这个错误转发给观察者。最后那部分我有麻烦了。

DataService.get()的HTTP请求

代码语言:javascript
运行
复制
return this.http.get(url,options)
    .retryWhen(errors => errors.delay(1000).take(2))
    .catch((res)=>this.handleError(res));

订阅

代码语言:javascript
运行
复制
this.dataSvc.get('/path').subscribe(
    res => console.log(res),
    err => console.error(err),
    () => console.log('Complete')
);

我的服务器设置为总是返回一个错误(状态400 Bad request)。

  • 我希望应用程序发出第二个请求,第三个请求,然后抛出要被this.handleError()捕获的错误
  • 实际发生的情况:应用程序发出第二个请求,发出第三个请求,然后可观察到没有错误地完成(“完成”打印到控制台)

Angular 2 rc.6RxJS 5 beta 11Typescript 2.0.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 09:10:50

我用了 operator

代码语言:javascript
运行
复制
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()捕获。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39465733

复制
相关文章

相似问题

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