查看结果 Scala Future 的副作用



我有一个返回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
}
}

我需要手动返回输入的地方。

Future.andThen:https://www.scala-lang.org/api/current/scala/concurrent/Future.html#andThen 就是为了这个目的。

对于您的代码,如下所示:

future.andThen(checkResult).onComplete(processResult)

此表达式返回andThen操作之前原始 Future 结果的新 Future。传入的操作 andThen 应该只是副作用,结果将被丢弃。您还可以将几个andThen串在一起,以执行多种副作用。

最新更新