Scala, восстановить вложенные фьючерсы?

У меня есть несколько вложенных фьючерсов в Scala. Мне интересно, могу ли я использовать один recover, чтобы поймать все бросаемые предметы, или у каждого Future должно быть свое собственное восстановление? Представьте, что метод1 и метод2 производят как Future[Option[A]],

method1.flatMap {

  case Some(object1) =>

    method2(object1).map {
      case Some(object2) => ...
      case None => ...
    }.recover { case t => .... } <--- DO I NEED THIS?

  case None => ....

}.recover { case t => ... } <--- OR THIS ALONE IS ENOUGH?

person ticofab    schedule 28.08.2015    source источник
comment
Еще одна вещь, о которой вам нужно подумать, это размещение вашего recover. Поместив один для method1 после flatMap, если этот Future выйдет из строя, он не войдет в flatMap. Если вы поместите recover перед flatMap, то он войдет в него. Просто еще одна вещь, чтобы взвесить.   -  person cmbaxter    schedule 28.08.2015


Ответы (1)


Пока вы сглаживаете все вложенные Futures, как в своем примере, не имеет значения, на каком уровне выдается исключение. Если в какой-то момент вашей вложенной структуры возникнет исключение, вы перестанете опускаться ниже. Из-за выравнивания выброшенное исключение будет поднято на верхний уровень. Оттуда вы можете обработать исключение с помощью метода recover.

person Till Rohrmann    schedule 28.08.2015