如何处理 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))

如果 OptionNone 那么第二个 map 什么都不做,如果 Future 失败那么第一个 map 会做没什么。

因此,根据您的出色回答,我想出了一个解决方案。因为这是选项响应。

response.map{
       res => res match {
         case Some(value) =>populateResponse(value)
         case None =>  None
     }