我有一些返回Futures 的函数。调用者通过 注册回调onComplete。
def makeHttpRequest(): Future[T] = ???
makeHttpRequest().onComplete {
case Success(v) => ???
case Failure(ex) => ???
}
Run Code Online (Sandbox Code Playgroud)
现在我想对这些函数(或函数调用)启用重试。有没有关于如何实现这一目标的建议?
没有开箱即用的重试功能。然而,基于Retry 一个返回 Future 的函数,请考虑
def retry[T](n: Int, expr: => Future[T]): Future[T] =
Future.unit.flatMap(_ => expr).recoverWith {
case e if n > 1 => retry(n - 1, expr)
case e => Future.failed(e)
}
retry(3, makeHttpRequest())
Run Code Online (Sandbox Code Playgroud)
https://scalafiddle.io/sf/otseSX0/0
或考虑专用库,例如softwaremill/retry。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |