我想知道如何递归地构建一条Akka future链,使其按顺序运行,如果future中的doWork
调用失败,则应重试该future最多3次,如果重试次数耗尽,则链应该失败。假设所有doWork
调用都成功,返回的future futChain
应该只完成一次。
object Main extends App {
val futChain = recurse(2)
def recurse(param: Int, retries: Int = 3): Future[String] {
Future {
doWorkThatMayFailReturningString(param...)
} recoverWith {
case e =>
if (retries > 0) recurse(param, retries -1)
else Future.failed(e)
} flatMap {
strRes => recurse(nextParam) //how should the res from the previous fut be passed?
}
}
futChain onComplete {
case res => println(res) //should print all the strings
}
}
- 我该如何将结果作为集合返回?即在这个例子中,每个
doWork
函数返回的String
(我需要修改recurse
函数以返回Future[List[String]]
)。 - 我应该使用
recover
还是recoverWith
? - 调用
flatMap
来链接这些调用是否可以? - 我应该考虑尾递归和栈溢出问题吗?
- 我最好递归地构建一个future列表并缩减它们吗?
foldLeft
可以用于创建动态大小的Future
链。 - Randall Schulz