Да, это исключение, независимо от того, каким будет будущее.
Бросание исключения может служить сообщением для потока, в котором выбрано исключение.
Вообще,
andThen используется для выполнения каких-то стороны, влияющего код после того, как данное будущее завершено и типа результата операции после andThen является результатом того же исходного будущегокиевстар. Таким образом, вы можете сопоставить шаблон и ожидать того же результата, что и в оригинальном будущем.
В вашем случае сторона, осуществляющей операции бросает исключение, но это может быть любой другой полезной стороне осуществления операции, как при записи в файл, закрывая ресурсы и т.д.
Вот реализация andThen
из стандартной библиотеки Scala.
andThen
Используется для запуска какой-либо операции, выполняющей побочные действия, после того, как будущее, на которое оно вызывается, завершено, но вещь, которую следует отметить, является результатом, который будет представлять собой всю операцию, с будущим с исходным будущим результатом.
def andThen[U](pf: PartialFunction[Try[T], U])(implicit executor: ExecutionContext): Future[T] = {
val p = Promise[T]()
onComplete {
case r => try pf.applyOrElse[Try[T], Any](r, Predef.conforms[Try[T]]) finally p complete r
}
p.future
}
Уведомление после andThen
операции будущего с результатом первоначального будущего возвращается.
Как сказал @ Ювал Ицхаков, вы можете использовать его для исключения исключений в основной поток. Но в целом он используется для побочного эффекта после завершения будущего.