ApiCall 通过 apiCallId ,然后取 headOption (应该只有一个b/c顶点是唯一的),然后映射到该顶点。但出于某种原因,此函数返回一个空 List() ...
ApiCall
apiCallId
headOption
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 }) }
我仔细检查了一下 顶端的 存在于我的数据库中。有什么问题?
顶端的
最可能的答案是,您的选项[ApiCallRow]被包装到由tryRun函数添加的内容中-它可能是 Try[Option[ApiCallRow]] 或 Future[Option[ApiCallRow]]. Try using using a flatMap`而不是此处的地图或匹配选项:
Try[Option[ApiCallRow]]
Future[Option[ApiCallRow]]. Try using using a
database.tryRun(tableQuery).flatMap({ case Some(a: ApiCallRow) => return Future.successful(a.token == token) case _ => Future.successful(false) })