gpt4 book ai didi

scala - Playframework : Type mismatch found scala.并发.Future[play.api.mvc.Result] 需要 : play. api.mvc.Result

转载 作者:行者123 更新时间:2023-12-02 20:55:04 25 4
gpt4 key购买 nike

我的 PlayFramework Controller 中有以下代码:

  def auth = Action.async(parse.json) { request =>
{

val authRequest = request.body.validate[AuthRequest]
authRequest.fold(
errors => Future(BadRequest),
auth => {
credentialsManager.checkEmailPassword(auth.email, auth.password).map {

case Some(credential: Credentials) => {

sessionManager.createSession(credential.authAccountId).map { //Throws an error
case Some(authResponse: AuthResponse) => Ok(Json.toJson(authResponse))
case None => InternalServerError

}

}

case (None) => Unauthorized
}

})
}
}

我在上面带有错误注释的行收到以下错误:

Type Mismatch:
[error] found : scala.concurrent.Future[play.api.mvc.Result]
[error] required: play.api.mvc.Result
[error] sessionManager.createSession(credential.authAccountId).map {

那里的 createSession 调用返回一个 Future[Option[Object]] 但我不知道如何解决这个问题。

任何帮助将不胜感激。

最佳答案

简短回答:将 credentialsManager.checkEmailPassword(auth.email, auth.password).map 行中的 .map 更改为 .flatMapcase (None ) => 未经授权case None => future (未经授权)

说明:

credentialsManager.checkEmailPassword(auth.email, auth.password) 返回一个 Future[Option[Credentials]] 并且对其进行映射将始终返回一个 Future 并在其中 sessionManager.createSession(credential.authAccountId) 还返回一个 Future 因此, credentialsManager.checkEmailPassword(auth.email, auth) 的最终结果.password)Future[Future[something]] 为了避免这种情况,您可以展平它,然后映射它并可以通过 flatmap

一步完成

关于scala - Playframework : Type mismatch found scala.并发.Future[play.api.mvc.Result] 需要 : play. api.mvc.Result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com