首页 > 解决方案 > 如何将 Future[String] 转换为 String scala?

问题描述

我有一个函数,它需要一个字符串参数def externalServerError(response: String),但我无法发送我的 Future[String] 参数,我试图将一个函数更改为def externalServerError(response: Future[String])但它给出了一个错误,因为在里面我使用了库中的类,ServerErrorRequestException它期望 Option[String]。这是完整的代码:

 def externalServerError(response: String): ErrorInfo = {
    val apiException = ServerErrorRequestException(
      message = Some(response)
    )
    apiExceptionToErrorInfo(apiException)
  }

}

标签: scala

解决方案


您可以完全切换到async

def externalServerError(response: Future[String]): Future[ErrorInfo] = {
    response.map(str =>
       apiExceptionToErrorInfo(
          ServerErrorRequestException(
            message = Some(str)
         )
       )
    )
  } 
}

或者使用 Await (这被认为是不好的风格!

def externalServerError(response: Future[String]): Future[ErrorInfo] = {
    val str = Await.result(response, 1.second)
    apiExceptionToErrorInfo(
       ServerErrorRequestException(
         message = Some(str)
       )
    )
  } 
}

推荐阅读