- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Angular 4.3 的新手。我有一个 map 应用程序,它通过下载一系列小图像(“图 block ”)来呈现“ map 层”。在启动时, map 层可能需要 0.1 - 5.0 秒的时间来下载。
我需要在客户端收到两个或多个图 block 时触发一个事件。我原以为我可以通过订阅一个以 200 毫秒为间隔重试最多 30 次的 Observable 来实现这一目标。
到目前为止:
public updateTileContainer() {
this._getTileContainer().subscribe(container => {
if (container) {
console.log('* do stuff with container *');
}
});
}
private _getTileContainer(): Observable<any> {
return Observable.interval(200)
.mergeMap(function (n) {
const tileImages = $('#mymap').find('img[src*=\'kml\']');
console.log(`Retry ${n}: ${tileImages.length} tiles found`);
if (!tileImages || tileImages.length < 2) {
return Observable.of(null);
}
const tileContainer = getContainer(tileImages);
return Observable.of(tileContainer);
})
.take(30);
}
这行得通!有点。我得到这个输出:
Retry 0: 0 tiles found
Retry 1: 0 tiles found
Retry 2: 0 tiles found
Retry 3: 0 tiles found
Retry 4: 0 tiles found
Retry 5: 0 tiles found
Retry 6: 0 tiles found
Retry 7: 2 tiles found
* do stuff with container *
Retry 8: 3 tiles found
* do stuff with container *
Retry 9: 9 tiles found
* do stuff with container *
Retry 10: 12 tiles found
* do stuff with container *
etc.
我实际上想做的是在“重试 7”时发出一个事件,然后停止发出。
我如何才能将其更改为在找到容器后立即“完成”Observable?我如何“跳过”重试 0 到 6 的发射事件,因为它们不是真正的事件?如果重试 30 次仍未找到容器,我是否可以从 Observable 中抛出错误?
最佳答案
.retry(count)
如果您的选择中的图 block 少于 2 个,您可能会抛出错误。然后 retry()
30 次。
注意:第 30 次重试后,错误实际上会发出,您需要处理它。但这可能是一件好事(进一步了解)。
public updateTileContainer() {
this._getTileContainer().subscribe(container => {
console.log('* do stuff with container *');
},error=>{
console.log('no container found !');
});
}
private _getTileContainer(): Observable <any> {
return Observable.timer(200).map(()=>{
const tileImages = $('#googlemap').find('img[src*=\'kml\']');
if (tileImages.length <= 2)
throw new Error("not enough tiles !");
return getContainer(tileImages);
})
.retry(30);
}
您的解决方案和@JonStødle 的确实有效。但请注意,如果您无法获得任何容器,您将不会收到通知。事实上,如果没有找到容器,Observable 就完成了,没有错误。
如果您想知道您无法找到容器,处理错误可能是一件好事。
关于 Angular 4.3 可观察量 : how to retry with an interval and max retries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46754545/
我使用此代码调用azure api: http://pythonfiddle.com/sjj/ 但是错误消息是: Client-Request-ID=b68d2b74-5e54-11e8-9b
我是 Angular 4.3 的新手。我有一个 map 应用程序,它通过下载一系列小图像(“图 block ”)来呈现“ map 层”。在启动时, map 层可能需要 0.1 - 5.0 秒的时间来下
我正在尝试测试使用自定义重试策略的重试模板。为此,我使用以下示例: https://github.com/spring-projects/spring-retry/blob/master/src/te
我正在尝试做 pip install --upgrade pip并保持 收到此错误: WARNING: Retrying (Retry(total=4, connect=None, read=None
我正在使用微软的标准示例将新实体插入到表中。有没有办法跟踪是否执行了重试? 代码: CloudTableClient tableClient = storageAccount.CreateCloudT
我正在使用 Spring-retry-1.2.0 ,重试工作正常,但在我的方法中,我想知道重试是否是最后一次重试,是否有任何方法可以在 spring-retry 中获取 retrialCount 或最
我正在尝试全新安装 virtualbox、vagrant、homestead 和最终的 laravel。刚开始使用新笔记本电脑。我之前已经用 homestead 设置了 vagrant 并且没有问题。
目录 循环加判断 retrying 总结 我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请
我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制。下面来说一下Python中的重试方法。
在日常的一些场景中, 很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,某些场景需要对一些异常情况下的方法进行重试就会用到spring
spring-retry 的@CircuitBreaker 和spring-cloud-starter-netflix-hystrix 的@HystrixCommand 有什么区别? 它们似乎都实现了
我在 Spring Boot 项目中使用 Resilience4J 来调用 REST 客户端,如下所示: @Retry(name = "customerService") public Custome
我有一个有两台服务器的网站——一台专门用于面向客户端的 Web 服务,另一台是更强大的数据处理服务器。 我目前有一个过程,其中 Web 服务器与数据服务器联系以获取通常如下所示的多个请求: paylo
我遇到了@CircuitBreaker 没有重试的问题。 我有一个服务类(例如 UserService 类和方法名称 getUser),此方法调用另一个 Spring bean(例如 AppClien
请问是否可以使用弹性 4j 在客户端记录重试尝试? 也许通过某种配置或设置。 目前,我正在使用带有 Spring boot Webflux 基于注释的resilience4j。 效果很好,这个项目很棒
我在使用 python3 中 tenacity 库中的“重试”工具时遇到问题。当我使用生成器时,“重试”装饰器似乎不起作用。 我有一个代码示例来说明我的情况: from tenacity import
所以我这里有一个 Azure 机器学习管道,它由许多 PythonScriptStep 任务组成 - 确实非常基本。 由于网络问题或其他问题,其中一些脚本步骤会间歇性失败 - 确实没有什么意外。这里的
如果我为多个上游反向代理设置了 nginx 负载平衡,其中一个出现故障,我的用户会收到 502 错误消息,还是 nginx 会负责重新路由到已启动的上游? 最佳答案 来自 documentation
我正在创建一个应用程序,它可以恢复并显示在线存储在 mysql 主机上的 html 文本。如果快照没有任何数据,它应该重试查询并重建 View ,直到它获得数据。 这就是我使用数据库中的数据创建小部件
我想在 Spring Boot 2.2.1.RELEASE 项目中使用 resilience4j-spring-boot2 来重试针对第三方服务的失败请求。但是,由于某种原因,我无法注册fallbac
我是一名优秀的程序员,十分优秀!