如何将 `getOrWaitUntilNonEmpty` 作为单个衬垫执行?

2023-12-25

我有一个高级代码结构,如下所示:

val block: (=> Option[Seq[String]]) = ...
val matches = block().get.toArray

问题是这段代码可能会失败,即.get being None取决于时间,例如我是页-scraping谷歌太频繁,然后我会等待并重试......

我可以像这样等待,即在 11-16 秒之间随机等待:

val random = new Random()
Thread.sleep((11000 * random.nextFloat() + 6000).ceil.toInt)

什么是一种优雅的单行方式来[等待]循环直到执行结果block不是空的吗?就像是:

val timeInMillis = (11000 * random.nextFloat() + 6000).ceil.toInt
block().getOrWaitUntilNonEmpty(timeInMillis).toArray

Try softwaremill/retry https://github.com/softwaremill/retry like so

retry.Pause(max = 10, Defaults.delay)(odelay.Timer.default) {
  block
}

有依赖关系

"com.softwaremill.retry"  %% "retry"       % "0.3.2"
"com.softwaremill.odelay" %% "odelay-core" % "0.3.0"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 `getOrWaitUntilNonEmpty` 作为单个衬垫执行? 的相关文章

随机推荐

  • 构建和使用 Qt Embedded 的经验

    我目前正在尝试在 ARM 架构的 Ubuntu 机器上编译和构建用于嵌入式 Linux 的 QT 到目前为止 我在尝试制作时遇到了很多错误 最大的一个是 2000 行 C 函数 它导致了编译器错误 其他人对此有什么经验 您是如何解决这个问题
  • iOS 4.1 中的 NSDate 格式

    iOS 4 0 中的 NSDate date 用于返回日期 格式为 2010 09 15 09 28 26 0530 但现在在 iOS 4 1 中 它返回以下格式的日期 2010 09 15 09 28 26 格林威治标准时间 在我的应用程
  • 在Java中向日期添加天数[重复]

    这个问题在这里已经有答案了 如何在 Java 中为日期添加 x 天 例如 我的日期是01 01 2012 using dd mm yyyy作为格式 添加 5 天 输出应为06 01 2012 SimpleDateFormat sdf new
  • Google电子表格:在单元格值更改时运行脚本

    在电子表格中 我有两张表 和计算器 当我更改 上的值时 B1 即工作表的单元格 B1 我想运行脚本 更改 实际上清除 计算器 的值 B3 即工作表 计算器 的单元格 B3 这是我的代码 我通过电子表格 gt 工具 gt 脚本编辑器创建它 所
  • 通过 AppCompatDelegate 进行 Android Jetpack Compose 语言切换不起作用

    我正在尝试为我正在开发的应用程序构建一个应用程序内语言切换器 但我已经尝试了 Stackoverflow 上几乎所有可用的方法 我也尝试过这里的官方指南https developer android com guide topics res
  • 设计需要根据泛型类型进行重载的 API 的可能性有哪些?

    在给定的班级中Example a 我需要以下两个功能可用 void doSomething Supplier a b void doSomething Supplier b 实现这一目标的可能性有哪些 我知道以下方法 给函数起不同的名字 对
  • 捕获来自 Web 浏览器控件的所有请求和响应?

    有没有办法捕获并打印出来自 Web 浏览器控件的所有请求和响应 包括异步请求 你有没有想过使用Fiddler http www fiddler2 com fiddler2 他们甚至还有一个API http www fiddler2 com
  • Qt 没有属性“AlignCenter”[重复]

    这个问题在这里已经有答案了 我在 Python 3 5 上使用 PyQt5 我想做一个QLabel带有居中文本的小部件 因此 我称之为setAlignment方法与AlignCenter flag 这是一个 MWE import sys f
  • HTML 中的视口是什么。

    HTML 中的视口是什么 您能否举一些有关如何访问视口详细信息的示例 视口是用户当前可以看到的网页部分 滚动条移动视口以显示页面的其他部分 按照本文的说明在 Javascript 中获取视口尺寸 http andylangton co uk
  • 在mysql数据库中存储大量数字的问题

    我正在使用 mysql db 来保存 id 一切正常 但现在像这样的id 10000000754987 存储为1 0000000754987E 14 我该如何解决它 该字段设置为 varchar 255 个字符限制 我很感激任何帮助 Tha
  • 确定模板中结构或元组的成员偏移量

    我想编写一个模板函数 将表写入 HDF5 文件 签名应该类似于 template
  • 使用 Codeigniter 发送电子邮件时出现问题 - 在邮件正文中发送标头

    codeigniter 中的电子邮件类出现奇怪的问题 当我直接向我的 Gmail 帐户电子邮件地址发送电子邮件时 效果很好 但是 如果我将电子邮件发送到不同的电子邮件地址并使用 POP3 将该电子邮件地址导入到 gmail 中 则由于某种原
  • 从分数列表生成标准竞赛排名

    给定分数列表 例如 5 5 4 2 2 0 我希望返回标准竞赛排名 1 1 3 4 4 6 From 维基百科的排名页面 http en wikipedia org wiki Ranking 这里是SRC的总结 标准竞赛排名 1224 排名
  • 如何在流星中响应式聚合 mongodb

    我是流星新手 我建立了发布 订阅的概念 我在反应式执行聚合时遇到以下错误 客户端代码 import Template from meteor templating import ReactiveVar from meteor reactiv
  • 在我的 virtualenv 中,我需要对所有命令使用 sudo

    我设置了一个virtualenv 这是有效的 但由于某种原因我需要使用sudo对于像这样简单的命令mkdir 显然我做错了什么 知道它可能是什么吗 Thanks 检查目录权限和所有者并给出 sudo chown R me me virtua
  • 模拟无法与 RSpec 和 Devise 配合使用

    我目前正在使用 RSpec 2 开发 Rails 3 Web 应用程序 并且我们使用 Devise 进行身份验证 我们的一个 很快还有许多 控制器要求用户登录 我知道 Devise 提供了sign in测试助手 但它可以与 RSpec 或
  • 在JPanel中调用setEnabled(false)的原因

    我现在在 Swing 上工作了一段时间 但在实践中从未遇到过需要打电话的情况setEnabled false in JPanel 尽管如此 我有时会在一些复杂的图形用户界面中看到这样的代码 但我真的不明白为什么有人想用它 所以 请给我一些现
  • 使用 React Router v4 / v5 的嵌套路由

    我目前正在努力使用 React Router v4 来嵌套路由 最接近的例子是路由配置React Router v4 文档 https react router now sh 我想将我的应用程序分成两个不同的部分 前端和管理区域 我在想这样
  • 按特定顺序执行测试套件

    我正在使用 maven failsafe 插件来触发 testng 套件 其配置类似于
  • 如何将 `getOrWaitUntilNonEmpty` 作为单个衬垫执行?

    我有一个高级代码结构 如下所示 val block gt Option Seq String val matches block get toArray 问题是这段代码可能会失败 即 get being None取决于时间 例如我是页 sc