我有一张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
。问题是什么?
答案 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)
})