问题标签 [retrywhen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1047 浏览

angular - 如何有条件地做 retryWhen on action click from小吃栏动作Angular 7.x

我正在通过ErrorInterceptor实现自动开发重试功能HttpInterceptor。我读到这retryWhen正是我所需要的。我希望它发生的是有条件地重试点击 Snackbar 的“重试”按钮,我不希望它触发无限的请求(所以,也许 3 次后你不能再试一次)。问题是现在我不知道如何在单击通知小吃栏上的操作按钮后有条件地重试

我已经尝试触发 notificationService ,它使用简单的代码显示通知:

这不再重试该功能,它只是停止。

然后我找到了一些关于 retryWhen 的代码,它描述了一个 generalRetryStrategy https://www.learnrxjs.io/operators/error_handling/retrywhen.html。我添加了这个,但我希望它有条件地触发(链接到操作按钮)。

我在通知服务上有一个回调函数

拦截器现在如下:

使用以下函数 genericRetryStrategy,请注意这与 learn-rxjs 中的代码几乎没有什么不同。

我希望它仅在真正调用通知服务回调函数时才触发重试功能(因此单击“重试”按钮)。现在它立即跳过通知服务调用并返回错误(throwError(error))

在此处输入图像描述

任何帮助深表感谢。

0 投票
0 回答
456 浏览

angular - 仅当错误是客户端时,Angular 重试 http 调用

我是 Angular 新手,如果客户端和服务器之间出现网络中断或某些错误,我想重试 http 调用。目前我有官方文档建议的这种配置

这是错误处理程序:

我有一个身份验证或授权错误的拦截器:

问题是我所有的 http 重试 3 次,即使问题出在服务器上,所以它是无用的(此外控制台打印处理程序消息),我只想重试通信错误。我阅读retryWhenerror.error instanceof ErrorEvent捕获客户端或网络错误。retry有一种方法可以一起制作,我不能retryWhen在没有编译器错误的情况下检查错误实例

0 投票
1 回答
792 浏览

kotlin - Kotlin,RxJava2:用户交互后撰写和重试

在过去的两天里,我阅读了很多关于 rxJava retryWhen 运算符的信息。 这里这里这里还有一些我忘记了。

但不幸的是,我无法让它工作。我想要实现的是,我进行了 API 调用。如果调用返回错误,我将通过重新加载按钮向用户显示 SnackBar。如果用户单击此按钮,我想重新订阅该链。

这是我的代码:

响应来自改造2。我需要它来包装数据类以检查响应是否成功。

下一个乐趣是在 ViewModel 的存储库中调用:

Resource 是调用状态(SUCCESS、ERROR、LOADING)的另一个包装器。

最后是变压器:

重试主题:

当用户单击重试按钮时,我调用:

现在的问题是,错误没有返回给 ViewModel 并且 SnackBar 永远不会显示。我也试过 onErrorResumeNext() 没有成功。整个 retryWhen/zipWith 部分似乎工作。因为在存储库中还有一些没有重试行为的 API 调用(还)并且那里显示了 SnackBar。这意味着,我在显示 SnackBar 的地方进行另一个调用 -> 按钮单击,并且重试转换按预期工作。

如果您需要更多信息,请随时询问!任何帮助表示赞赏!

0 投票
2 回答
120 浏览

python - 如何重试代码 5 次,每次尝试之间有 5 秒的间隔

我有一些代码可以检查来自 Stripe 的 Webhook 的数据。现在我得到了一些代码来查询我的数据库以检查付款是否已确认。我正在尝试编写一个函数来检查我的数据库以查看是否已确认付款,如果尚未确认付款,则程序应等待 5 秒然后再次检查,最多检查 5 次。如果在第五次尝试后付款仍未显示为已确认,那么我需要重定向用户。

这是因为我的代码执行速度可能比 Stripe 将其 webhook 响应返回到我的服务器更快。

当前代码如下。如何在 if 语句上创建“循环”?

0 投票
1 回答
4212 浏览

angular - Angular 7 - 如何在某些响应状态代码上重试 http 请求?

我正在尝试从 Angular 拦截器捕获 http 请求的错误,并将 401 作为注销处理,同时重试 503 和 504 响应n时间。

这是我的 http 拦截器:

我 100% 确定这段代码在我编写时有效,因为我多次测试了它,但现在它给了我:

上次它工作时,我使用的是 angular 6。现在我使用的是 angular 7。我已经尝试了不同的 rxjs 版本,但无济于事。

我该如何解决这个问题并实现一个简单的重试逻辑?

编辑:

我只是注意到,如果我import 'zone.js/dist/zone-patch-rxjs';poliyfills.ts文件中删除它,那么它就可以工作,但其他事情就会停止工作。

0 投票
1 回答
260 浏览

android - 如何并行获取 observables,其中只有一个 api 调用具有重试逻辑

我想在我的 android 应用程序中使用 RxJava 实现一个逻辑,这需要三个并行的 api 调用。只有第三个 api 调用有重试逻辑。如果在尝试了 3 次后都成功了,那么将会对第四个 api 进行后续调用,否则只会将第一次和第二次 api 调用的结果传递给订阅者。

我尝试使用 Zip 运算符来实现这一点,但后来被第三个 api 调用的重试逻辑卡住了。

Observable.zip(observable1, observable2, observable3, new Function3() { @Override public Object apply(String s, Integer integer, Boolean aBoolean) throws Exception { if (aBoolean==null){ alphabets3.retry(3).doOnComplete( new Action() { @Override public void run() throws Exception { // 结果永远不会被使用 } }); }

0 投票
0 回答
143 浏览

angular - 有没有办法清除 rxjs 超时,以便在允许用户再次登录而不会超时后,我可以使用 retrywhen 重试 http 请求?

如果用户被服务器注销并且客户端仍然认为用户已登录,我将按401预期收到错误代码。但是,在提示用户输入凭据并重新登录后,我希望暂时“保存”并重试失败的请求。为此,我认为这retrywhen会很棒,但是当与我一起使用时,timeout我开始遇到问题. 如果任何请求花费的时间超过 10 秒,我希望在我的客户端上出现超时错误,但是如果请求失败并显示401状态并提示用户输入凭据,我希望不会因为超时而出现该可观察到的错误。

我尝试创建和使用具有 replaySubject 的自定义服务,以便我可以修改超时并使用 switchmap 将当前订阅的 base observable 与更改后的超时值交换,但这并不特定于单个请求,因为它是服务/单例性质,并将重播所有请求。(我确信采用这个方向还有其他问题。

我在stackblitz上有一个超级精简的示例,其中我的“等待用户输入”被替换为延迟,以模拟用户花费的时间比设置的 rxjs 超时时间长。

我希望在用户成功登录后我应该能够重试失败的 httpRequest 而不会超时并且不会将任何内容保存到外部状态

0 投票
3 回答
1017 浏览

unit-testing - 如何在 rxjs 中对 retryWhen 运算符进行单元测试?

我正在尝试对自定义 RxJS 运算符进行单元测试。操作符很简单,它使用 RetryWhen 重试失败的 HTTP 请求,但有延迟,只有在 HTTP Error 在 500 范围内时才会重试。使用 jasmine,这是在 Angular 应用程序中。

我看过这个:

带有 retryWhen 的 rxjs 单元测试

不幸的是,更新 SpyOn 调用似乎并没有改变连续重试返回的 observable。每次重试时,它都会使用原始间谍值重试。

我还查看了一堆 rxjs 弹珠示例,但似乎都不起作用。我不确定是否可以在这里使用 rxjs 弹珠,因为(AFAIK)无法模拟您首先提交错误的 observable,然后在后续尝试中提交成功的 observable 的情况。

该代码基本上是这个的克隆: https ://blog.angularindepth.com/retry-failed-http-requests-in-angular-f5959d486294

我希望能够证明它可以订阅一个在第一次尝试时返回错误但随后返回成功响应的 observable。最终订阅应该显示 observable 发出的任何成功值。

提前感谢您的任何见解。

0 投票
0 回答
71 浏览

angular - 如何从 Utils 方法订阅主题

我已经实现了第二个例子——它完美地工作,如果看到 503,它将重新启动该方法。

我的目标是在第一次重试时在前端显示警告消息。但是,该方法位于 utils 类中,远离我要在其中设置显示警告消息的标志的组件。

RxJS 工具类

..组件.ts

我希望 RxJS utils 类控制何时显示以下内容

前端

关于如何实现这一目标的任何示例/想法都会很棒!

提前致谢!

0 投票
2 回答
901 浏览

angular - Angular8 HttpInterceptor 返回值

我有一个基本的 HttpInterceptor,我在其中使用 rxjs retryWhen 以便在服务失败时重试一定次数。如果服务调用已达到最大重试量,那么我想将此反馈给最初发起服务调用的方法。

我的问题是,我怎样才能将控制权交还给 http 调用的原始发起者?我需要这样做以便在一个地方(拦截器)集中控制重试处理,并且我希望能够回调到调用函数中的成功/失败方法。

我的问题是错误被全局错误处理程序吞下,没有任何东西传回给我的调用者。

例子: