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

我想使用期货而不是等待,但随后返回响应。下面是一个非阻塞的代码片段

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
}

最新更新