Если у меня есть некоторые вычисления, что занимает некоторое время, я мог бы поместить его в scala.concurrent.Future
:Scala Futures - flatMap и OnFailure
val f = Future { someLongRunningFunction() }
и давайте говорить, что я хочу сделать что-то еще асинхронно раз, что вычисление завершается:
f.flatMap{ _ => anotherLongRunningFunction() }
В том случае, если первоначальный блок f
«s терпит неудачу, как я„идиоматически“справиться с этим при использовании flatMap
или других комбинаторов? Это всего лишь случай использования recover
или onFailure
до flatMap
?
Мне нравится элегантность и простота использования flatMap
, но кажется, что сценарии неудач мешают ему.
Редактировать: второе будущее зависит от первого, отсюда flatMap
. Я ищу решение, которое изящно позволит мне подключаться, как я бы, с flatMap
, но также обрабатывать отказы первого.
Второй метод зависит от результата первого? Вы также заботитесь о возвращенной стоимости? –
Да, это так, поэтому заказ. –
Хорошо, хорошо .. что произойдет, если 'f' не удастся? Почему нужно беспокоиться о том, чтобы запустить второе будущее, если это зависит от первого? Как мы можем выздороветь? Что вы хотите и когда? –