Scala откат с фьючерсами и возвращаемым значением вместо будущего - PullRequest
1 голос
/ 21 февраля 2020

Итак, вот ситуация

У меня есть функция

def funcA(): Future[Map[String,String]] // Lets say Future1
def funcB(): Future[Map[String,String]] // Lets say Future2

Итак, я хочу определить другую функцию, такую, что // Нужно внести некоторые изменения в эту функцию

 def funcCombine(): Future[Map[String,String]] = {
     for{
       a <- funcA()
       b <- funcB() if a.isEmpty
     }
}

Проверьте значение карты из FuncA и, если оно не пустое, верните его, в противном случае проверьте карту в FuncB и верните карту, если не пустое, в противном случае верните пустую карту.

Как я могу это сделать этот запасной механизм. Я пытался решить это сам, но ничего не смог сделать.

Ответы [ 2 ]

3 голосов
/ 21 февраля 2020

Я думаю, flatMap будет вашим другом здесь.

funcA().flatMap(m => if (m.isEmpty) funcB() else Future.successful(m))
0 голосов
/ 21 февраля 2020
def funcCombine(): Future[Map[String,String]] = {
 Future.find(List(funcA(),funcB()))(mapp => mapp.nonEmpty).map{
            case Some(mapp) => mapp
            case None => Map.empty
          }

}
...