当它应该 return 一个对象时,光滑 return 的空列表

Slick returns empty list when it should return an object

我有一个 ApiCall table。我试图确保对于每个 api 调用,都使用了适当的令牌。用简单的英语来说,我想我在这里做的是通过 apiCallId 过滤 ApiCall,然后取 headOption(应该只有一个 b/c api CallId 是唯一的),然后在其上进行映射。但是出于某种原因,这个函数 returns 是一个空的 List()...

def apiCallMatchesToken(apiCallId: ApiCallId, token: String): Future[Boolean] = {

val tableQuery = ApiCalls.filter(_.apiCallId === apiCallId).result.headOption

database.tryRun(tableQuery).map({
  case (a: ApiCallRow) => if (a.token == token) { true } else { false }
  case _ => false
})

}

我已仔细检查 apiCallId 是否存在于我的数据库中。有什么问题?

最可能的答案是您的 Option[ApiCallRow] 被包装到由 tryRun 函数添加的东西中 - 它可能是 Try[Option[ApiCallRow]]Future[Option[ApiCallRow]]. Try using using aflatMap` 而不是地图或匹配 Option这里:

database.tryRun(tableQuery).flatMap({ case Some(a: ApiCallRow) => return Future.successful(a.token == token) case _ => Future.successful(false) })