Вы пытаетесь написать Java
код, используя Scala
.
Вы делаете это неправильно. Прочитайте о Future
с и как их использовать.
Вот учебник
Future
s может быть составлен с использованием конструкций map
и flatMap
. recover
и recoverWith
предоставят пользователю доступ к исключению, произошедшему в конвейере вычислений
Вы должны сделать что-то вроде этого, приведенное ниже
def requestAction(): Action[AnyContent] = Action.async { implicit request =>
Future { "initial value" }.flatMap { _ =>
doSomethingAsyncAndGetResponseString() // returns Future
}.map { res =>
Ok(res)
}.recover { case th =>
Ok(th.getMessage)
}
}
Обработка исключений и восстановление после исключений
Обработка исключений встроена в Future
.
recover
предоставляет доступ к исключению, а также помогает пользователю предоставить альтернативное значение успеха в случае исключения.
recoverWith
предоставляет доступ к исключению, а также помогает пользователю предоставить / цепочку альтернативных Future
вычислений, которые могут быть успешными или неудачными.
Future {
throw new Exception("foo exception")
}.recover {
case th => println(s"msg: ${th.getMessage}")
}