加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 等待未来,接受一个

发布时间:2020-12-16 09:42:55 所属栏目:安全 来源:网络整理
导读:我想等待可能失败的scala的未来。如果我使用Await.result,将抛出异常。相反,如果我有f:Future [String]我想要一个方法Await.resultOpt(f):Option [String]或Await.resultEither(f):Either [String]。 我可以通过使用scala.util.control.Exception.catch
我想等待可能失败的scala的未来。如果我使用Await.result,将抛出异常。相反,如果我有f:Future [String]我想要一个方法Await.resultOpt(f):Option [String]或Await.resultEither(f):Either [String]。

我可以通过使用scala.util.control.Exception.catching或我可以f map(Right(_))recover {case t:Throwable =>左(t)},但必须有一个更直接的方式。

解决方法

你可以使用Await.ready,它只是阻止,直到Future成功或失败,然后返回到Future的引用。

从那里,你可能想要获得未来的价值,这是一个选项[Try [T]]。由于Await.ready调用,应该安全地假定该值为Some。那么这只是一个Try [T]和一个[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)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读