首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制retryWhen计数

如何限制retryWhen计数
EN

Stack Overflow用户
提问于 2019-02-25 18:23:06
回答 2查看 1.5K关注 0票数 0

我在retryWhen中使用了一个PublishSubject,以允许用户像this answer一样重试该操作。一切正常,但有一个问题-在用户点击重试3次后,我应该不再允许重试,并应该中止操作。有没有办法将重试次数限制在3次以内?我尝试过publishSubject.take(3)运算符,但它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-25 20:54:05

运算符(如retryWhen )具有次要流,其结果会影响主要流。因此,流操作也可以在这个次级流上执行,因此您可以应用各种操作符来塑造其结果:

改编:https://stackoverflow.com/a/47677308/61158

代码语言:javascript
复制
final PublishSubject<Object> retrySubject = PublishSubject.create();

disposable.add(
    getData()
    .doOnError(throwable -> enableButton())
    .retryWhen(observable -> 
        observable.zipWith(retrySubject, 
             (o, o2) -> o
        )
        .take(3)  // <------------------------ maximum 3 items from the secondary sequence
        .concatWith(Observable.error(new RetriesExhaustedException()));
     )
    .subscribeWith(/* do what you want with the result*/)
);
票数 1
EN

Stack Overflow用户

发布于 2021-09-23 19:45:57

不使用重试或retryWhen,为什么不尝试这种基于错误捕获操作的解决方案

代码语言:javascript
复制
let count = 0;
let retry_limit = 2;
from([1])
  .pipe(
    catchError((err, obs) => {
       if (count >= retry_limit) {
         return throwError(err)
       }
       count++
       return obs.pipe(delay(500))
  })
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54864021

复制
相关文章

相似问题

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