如何处理 Future[Option[value]] scala
How to deal with Future[Option[value]] scala
下面的代码片段运行良好,但与 Await.result
def validate(loginRequest: LoginRequest): Option[AuthResponse] = {
val response:Option[User] = Await.result(userDao.getUserByUsernameAndPassword(loginRequest.username,Utilities.encrypt(loginRequest.password)),Duration.Inf )
response match {
case Some(value) =>populateResponse(value)
case None => None
}
}
我想使用 Futures 而不是等待,然后 return 响应。下面是一个非阻塞片段
val response:Future[Option[User]]= userDao.getUserByUsernameAndPassword(loginRequest.username,Utilities.encrypt(loginRequest.password))
你如何在不阻塞的情况下得到类似的响应
response match {
case Some(value) =>populateResponse(value)
case None => None
}
您只需要在 Future
上调用 map
来更改结果,并在 Option
上调用 map
来更改选项的内容:
response.map(_.map(populateResponse))
如果 Option
是 None
那么第二个 map
什么都不做,如果 Future
失败那么第一个 map
会做没什么。
因此,根据您的出色回答,我想出了一个解决方案。因为这是选项响应。
response.map{
res => res match {
case Some(value) =>populateResponse(value)
case None => None
}
下面的代码片段运行良好,但与 Await.result
def validate(loginRequest: LoginRequest): Option[AuthResponse] = {
val response:Option[User] = Await.result(userDao.getUserByUsernameAndPassword(loginRequest.username,Utilities.encrypt(loginRequest.password)),Duration.Inf )
response match {
case Some(value) =>populateResponse(value)
case None => None
}
}
我想使用 Futures 而不是等待,然后 return 响应。下面是一个非阻塞片段
val response:Future[Option[User]]= userDao.getUserByUsernameAndPassword(loginRequest.username,Utilities.encrypt(loginRequest.password))
你如何在不阻塞的情况下得到类似的响应
response match {
case Some(value) =>populateResponse(value)
case None => None
}
您只需要在 Future
上调用 map
来更改结果,并在 Option
上调用 map
来更改选项的内容:
response.map(_.map(populateResponse))
如果 Option
是 None
那么第二个 map
什么都不做,如果 Future
失败那么第一个 map
会做没什么。
因此,根据您的出色回答,我想出了一个解决方案。因为这是选项响应。
response.map{
res => res match {
case Some(value) =>populateResponse(value)
case None => None
}