У меня есть две функции Future:
def parseIntFuture(str: String) = Future{scala.util.Try(str.toInt).toOption}
def divideFuture(a: Int, b: Int) = Future{ if (b == 0) None else Some(a / b)}
И теперь я хочу соединить их и в итоге получить результат типа Future[Option[Int]]
, который является возвращаемым значением второго, но если я сделаю так:
def stringDivideBy(aStr: String, bStr: String) = {
val x = for {
aNum <- parseIntFuture(aStr)
bNum <- parseIntFuture(bStr)
} yield (aNum, bNum)
x.map(n => {
for{
a <- n._1
b <- n._2
} yield divideFuture(a, b)
})
}
На самом деле я получу Future[Option[Future[Option[Int]]]]
вместо Future[Option[Int]]
.Я знаю, это потому, что я передаю одно Будущее другому, но я не знаю, как правильно соединить эти два Будущего, избегая использования Await
.Я остановлюсь явно использовать Await, тогда каково будет решение?