代码之家  ›  专栏  ›  技术社区  ›  cph2117

Slick在应该返回对象时返回空列表

  •  0
  • cph2117  · 技术社区  · 8 年前

    ApiCall 通过 apiCallId ,然后取 headOption (应该只有一个b/c顶点是唯一的),然后映射到该顶点。但出于某种原因,此函数返回一个空 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
    })
    
    }
    

    我仔细检查了一下 顶端的 存在于我的数据库中。有什么问题?

    1 回复  |  直到 8 年前
        1
  •  1
  •   TheMP    8 年前

    最可能的答案是,您的选项[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) })

    推荐文章