期货和回调将价值变为变量

时间:2016-05-31 12:10:44

标签: scala callback future

我目前正在努力解决scala中Future回调的逻辑问题。 我正在尝试获得一个应该执行以下操作的方法:

  1. 如果x成功完成,则以值x完成
  2. 如果x失败并且最后
  3. ,则以值y完成
  4. 如果x和y失败,则以y失败的例外完成。
  5. 这是我的代码,由于某些原因不起作用:

    def eitherF(x: Future[Int], y: Future[Int]): Future[Int] = {
      var ret : Future[Int] = x
      ret onComplete {
        case Success(i) => 
        case Failure(t) => ret = ret.flatMap(e => y)
      }
      ret
    }
    

    当返回ret时,它总是具有x的值,就像完全忽略onComplete块一样。  如何根据从x和y得到的结果来修改ret的值?

1 个答案:

答案 0 :(得分:2)

您可以结合使用Future.fallbackToFuture.recoverWith

def eitherF(x: Future[Int], y: Future[Int]): Future[Int] = {
  x.recoverWith {
    case _: Exception => y
  }
}