【发布时间】:2015-10-25 21:38:26
【问题描述】:
我有一个尾递归实现如下
@tailrec
def generate() : String = {
val token = UUID.randomUUID().toString
val isTokenExist = Await.result(get(token), 5.seconds).isDefined
if(isTokenExist) generate()
else token
}
get(token) 将返回 Future[Option[Token]]。
我知道在 Future 中阻塞是不好的。我试图返回 Future[String] 而不是 String。但似乎这是不可能的,除非我等待isTokenExist 完成。
还有其他方法/建议来实现吗?
【问题讨论】:
-
为什么它必须是尾递归的?为什么
generate必须返回 String 而不是 Future[String] ?如果你回答了这些问题,你可能会有更好的 API 设计。不是试图推翻你的问题,但这似乎是未来使用和不必要使用尾递归的反模式,IMO。 -
它实际上是我正在寻找的,不同的实现返回一个
Future[String]。但是,我似乎无法找到解决方案。如果你能提供一些启示,我会很高兴:)