scala - 等待 future ,得到一个

标签 scala future

我想等待一个可能失败的scala future 。如果我使用Await.result,则会引发异常。相反,如果我有f: Future[String],我想使用Await.resultOpt(f): Option[String]Await.resultEither(f): Either[String]方法。

我可以使用scala.util.control.Exception.catchingf map (Right(_)) recover { case t: Throwable => Left(t) }来获取,但是必须有更直接的方法。

最佳答案

您可以使用Await.ready,它仅阻塞直到Future成功或失败,然后将引用返回给该Future。

从那里,您可能想要获取Future的value,它是Option[Try[T]]。由于存在Await.ready调用,因此可以安全地假设valueSome。然后,只需在Try[T]Either[Throwable, T]之间进行映射即可。

简短版本:

val f: Future[T] = ...

val result: Try[T] = Await.ready(f, Duration.Inf).value.get

val resultEither = result match {
  case Success(t) => Right(t)
  case Failure(e) => Left(e)
}

关于scala - 等待 future ,得到一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21417317/

相关文章:

forms - 自定义表单约束抛出空指针异常

ios/xcode/objective-c : Display future dates in friendly format

c++ - 错误 C2248: 'std::future<Worldlet>::future':无法访问类 std::future<Worldlet> 中声明的私有(private)成员

Scala 语法糖,用于透明地调用伴生对象上的一元应用

scala - 从 Actor 返回实际结果而不是 Promise/Future

html - 事件源和 Internet Explorer

shell - clojure 中的 "inferior"进程 - 重定向异步输出以进行进一步处理

scala - 在无形状状态下动态参数化 Poly1 函数

java - 为什么 Java 8 CompletableFuture thenCompose 根据完成顺序生成不同的异常?

multithreading - Scala 中的异步 IO 与 future