Scala 如何检查Play Slick filter是否返回了一些行或空结果?

Scala 如何检查Play Slick filter是否返回了一些行或空结果?,scala,slick,play-slick,Scala,Slick,Play Slick,我有下面的代码,返回Future[选项[密码]] db.run(passwords.filter { x => x.providerID === loginInfo.providerID && x.providerKey === loginInfo.providerKey }.result.headOption) 我想做的是如下伪代码所示: if above query returns no results do nothing else re

我有下面的代码,返回
Future[选项[密码]]

db.run(passwords.filter {
      x => x.providerID === loginInfo.providerID && x.providerKey === loginInfo.providerKey
    }.result.headOption)
我想做的是如下伪代码所示:

if above query returns no results
  do nothing
else
  return new PasswordInfo(abovequeryresult.hasher, abovequeryresult.password, abovequeryresult.salt)
我是Scala的新手,对此一无所知。尝试使用下面示例中的
flatMap
,但上述
db.run()
flatMap
签名不同

find(loginInfo).flatMap {
      case Some(_) => update(loginInfo, authInfo)
      case None => add(loginInfo, authInfo)
    }

我正在使用Play Slick 1.1.1版

我想你的问题更多的是关于如何在Scala中操纵。如果您的
db.run
代码在播放控制器的动作中运行,最好的选择是将动作声明为
async
,并将查询结果映射到
Play.api.mvc.result
。大概是这样的:

def someAction = Action.async {
  find(loginInfo).map {
    case Some(authInfo) => 
      update(loginInfo, authInfo)
      Ok("Updated AuthInfo")               //Return a play.api.mvc.Resul 
    case None => 
      add(loginInfo, authInfo)
      Created("CreatedAuthInfo")           //Return another play.api.mvc.Resul
  }
}
或者如果你只想要结果

val future = find(loginInfo)
future.onSuccess {
  case Some(authInfo) => update(loginInfo, authInfo)
  case None => add(loginInfo, authInfo)
}
Await.ready(future, Duration.Inf)

我认为你的问题更多的是关于如何在Scala中操纵。如果您的
db.run
代码在播放控制器的动作中运行,最好的选择是将动作声明为
async
,并将查询结果映射到
Play.api.mvc.result
。大概是这样的:

def someAction = Action.async {
  find(loginInfo).map {
    case Some(authInfo) => 
      update(loginInfo, authInfo)
      Ok("Updated AuthInfo")               //Return a play.api.mvc.Resul 
    case None => 
      add(loginInfo, authInfo)
      Created("CreatedAuthInfo")           //Return another play.api.mvc.Resul
  }
}
或者如果你只想要结果

val future = find(loginInfo)
future.onSuccess {
  case Some(authInfo) => update(loginInfo, authInfo)
  case None => add(loginInfo, authInfo)
}
Await.ready(future, Duration.Inf)

update/add
返回什么
flatMap
希望在其主体中有一个
选项[T]
更新/添加
返回什么
flatMap
要求在其主体中有一个
选项[T]