Я прочитал официальный документ действия play async и понимаю, что Action.async - это
просто средство для упрощения создания действий на основе API, которые возвращают Future.
Что меня беспокоит, так это то, что кажется, что вы вводите необработанные ошибки, если вы слепо возвращаете Future [Response], потому что Future может быть Failure.
Конечно, вы можете обрабатывать дело Failure с помощью чего-то вроде
def index = Action.async {
intensiveComputation()
.map { i => Ok("Got result: " + i) }
.recover { case e: Exception => InternalServerError("error")}
}
Но вы также можете использовать Action, написав что-то вроде этого и последовательно используя Action over Action.async. не забудьте обработать ошибку.
def index = Action {
intensiveComputation().onComplete {
case Success(i) => Ok("Got result: " + i)
case Failure(e) => InternalServerError("error")
}
}
Так что, если я не хочу вводить непредвиденную ошибку, будет ли хорошей практикой всегда использовать Action.apply? Или я что-то упустил?