Прежде всего, я не вижу ни одного случая утечки исключений, так как если список пуст, он ненормально завершится с пользовательским исключением. Один из подходов, который вы могли бы использовать, заключается в том, чтобы использовать Either для переноса исключения в Left и правильного вывода в Right.
Но это будет включать изменение сигнатуры метода
def listOfFut(list: List[Int]): Future[Either[Exception,List[Int]]] = {
def handleFut(list: List[Int]): Future[Either[Exception,List[Int]]] = {
if (list.isEmpty) Future.successful(Left(CustomException("Test")))
else Future.successful(Right(list))
}
for {
myList <- Future.successful(list)
result <- handleFut(myList)
} yield result
}
listOfFut(List()) onComplete {
case Success(value) => println(s"Got the callback, meaning = $value")
value match {
case Right(output) =>
println(s"Output is ${output}")
case Left(ex) =>
println(s"Exception is ${ex}")
}
case Failure(e) => e.printStackTrace
}
Пожалуйста, дайте мне знать, если это ответит на ваш вопрос.