我正在尝试使用 Play2 和 reactivemongo 在 mongodb 中找到可用的 slug。我想出了以下递归方法。
private def findSlug(base: String, index: Int): String = {
val slug: String = Slug({
base + "-" + index
})
for {
user <- findOne(BSONDocument("slug" -> slug))
} yield {
user match {
case None => slug
case Some(user) => findSlug(base, index+1)
}
}
}
我收到以下错误
found : scala.concurrent.Future[String]
required: String
user <- findOne(BSONDocument("slug" -> slug))
^
我在更改返回类型、映射收益结果等方面玩了很多,但不知何故,我认为可能有一个更简单、简洁和正确的解决方案。这一切都归结为有一个递归函数,它调用我认为的另一个异步函数。
如果我将 findSlug 的返回类型更改为 Future[String] 我得到
[error] found : scala.concurrent.Future[String]
[error] required: String
[error] case Some(user) => findSlug(base, index+1)
[error] ^
什么是正确和惯用的解决方案?