Scala使用期货进行回退,并返回价值而不是期货

时间:2020-02-21 01:36:16

标签: scala future fallback

这就是这种情况

我有一个功能

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 个答案:

答案 0 :(得分:3)

我认为flatMap将在这里成为您的朋友。

funcA().flatMap(m => if (m.isEmpty) funcB() else Future.successful(m))

答案 1 :(得分:0)

def funcCombine(): Future[Map[String,String]] = {
 Future.find(List(funcA(),funcB()))(mapp => mapp.nonEmpty).map{
            case Some(mapp) => mapp
            case None => Map.empty
          }

}