我有一个返回Future
的方法。我想基于它记录成功或失败,然后处理结果。在带有流的Java中,我会做类似的事情
getCollection().stream().
peek(e -> System.out.println("element: " + e).
forEach(e -> doStuff(e))
是否有类似的方法可以“窥视”未来?我希望写这样的东西
getFuture().
peek(checkResult).
onComplete(processResult)
val checkResult: PartialFunction[Try[MyResult], Unit] = {
case Success(s) => println("Success on " + s)
case Failure(e) => e.printStackTrace()
}
但是我能找到的最好的是
getFuture().
transform(checkResult).
onComplete(processResult)
def checkResult(r: [Try[MyResult]) = r match {
case Success(s) => {
println("Success on " + s)
r
}
case Failure(e) => {
e.printStackTrace()
r
}
}
我需要手动返回输入。
答案 0 :(得分:3)
Future.andThen
:https://www.scala-lang.org/api/current/scala/concurrent/Future.html#andThen就是为此目的。
对于您的代码,类似:
future.andThen(checkResult).onComplete(processResult)
此表达式返回andThen
操作之前原始Future结果的新Future。传入andThen的操作仅是副作用,其结果将被丢弃。您还可以将几个andThen
串联在一起,以产生多种副作用。