当它应该返回一个对象时,Slick返回空列表

时间:2017-11-13 22:43:32

标签: scala orm slick

我有一张ApiCall表。我正在努力确保每次api调用都使用了相应的令牌。用简单的英语,我认为我在这里做的是ApiCall过滤apiCallId,然后取headOption(应该只有一个b / c apiCallId是唯一的),然后映射到那个。但由于某种原因,此函数返回空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。问题是什么?

1 个答案:

答案 0 :(得分:1)

最可能的答案是你的Option [ApiCallRow]被包装成tryRun函数添加的东西 - 它可能是Try[Option[ApiCallRow]]Future[Option[ApiCallRow]]. Try using using a flatMap`而不是地图或匹配选项:

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