如何以功能方式执行以下逻辑?
是否可以通过理解来做到这一点?
注意:该代码在第一次迭代后失败。我知道为什么不这样做(大多数逻辑发生在Future的
.map
内部。while循环独立于期货的内容进行迭代。),但我无法提出解决方案。
var offset = 0
breakable {
while (offset < 100) {
println(s"Loop Start. Offset = $offset")
val eventualResponse: Future[Either[String, List[String]]] = callPaginatedApi(offset = offset)
eventualResponse.map {
case Right(items) =>
println(items.mkString(", "))
offset += items.size
case Left(e) =>
println("Parsing of Response failed.", e)
break
}.recover {
println("Api call failed.")
break
}
}
}
输出:
Loop Start. Offset = 0
Api call failed.
String Number One, String Number Two
我有一个工作版本,其中Await
是API调用的Future,但是我想重写它,因为我需要更高级的错误处理。