Иногда у меня есть Option[Future[T]]
val. И я хочу иметь дело с этим:Scala. Лучший способ развернуть вариант [Future [T]]
do.something /* Option[A] here */ map { v => // v is of type A here
doComplexCalculation(v) // it returns Future[T]
} map { v => // I want to get T here, after future becomes resolved.
// But here is Future[T] and I shoud do that:
v map { v => // v is of type T here.
}
}
Плохая вещь, с моей точки зрения, является повышение уровня вложенности. Я хочу, чтобы иметь более плоский код :) один из techinc, что я нашел, это:
do.something /* Option[A] here */ map { v => // v is of type A here
doComplexCalculation(v) // it returns Future[T]
} getOrElse {
Future.failed(/* And I should pass Throwable here */)
} map { v => // v is of type T here
}
Не могли бы вы показать мне лучший способ сделать это? Вещи, которые мне не нравится в мое решение:
- я должен создать не удалось будущее вручную
- я должен создать
Throwable
вручную
Если это так, не используйте 'Option'. Просто 'Future [T]' кажется достаточно. Кажется, что если 'Option' является' None', вы будете реагировать, возвращая неудавшееся «Будущее». Таким образом, этот дополнительный уровень начала ('Option' of' Future') не нужен. –
Я не могу изменить 'do.something'. Но спасибо, я подумаю об этом в своем новом коде. –