У меня есть Future[Either[A, B]]
и функция, предоставляющая Future[C]
от B
.Будущее [Либо [A, B]] в будущее [Либо [A, C]], используя функцию (B => Будущее [C])
Мне нужно преобразовать Future[Either[A, B]]
в Future[Either[A, C]]
.
Есть ли прямой способ получить Future[Either[A, C]]
, а не Future[Either[A, Future[C]]]
?
Я думаю о чем-то вроде:
val eventuallyInitialValue: Future[Either[A, B]] = ???
val result: Future[Either[A, C]] = for {
e: Either[A, B] <- initialValue
c: C <- service.getValue(e.right)
} yield e.right.map(_ => c)
Это просто псевдо-код, так как service.getValue(e.right)
не компилируется. Каков был бы правильный способ сделать это?
Спасибо. Он просто должен быть возвращен как правое: bToFC (r) .map (Right (_)) –
@Alban: yep, отредактировано в – Daenyth
Если вы используете 'Future.successful' вместо' Future.apply', вы избежите создавая 'Left (e)' в пуле потоков. –