将值更改为变量的期货和回调

Futures and callbacks for changing value to variable

我目前正在为 scala 中 Future 回调的逻辑而苦苦挣扎。 我正在尝试获得一种应该执行以下操作的方法:

  1. 如果 x 成功完成,则完成值为 x
  2. 如果 x 失败,则以值 y 完成,最后
  3. 如果 x 和 y 失败,则完成 y 失败的异常。

这是我的代码,由于某种原因它不起作用:

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 的值?

您可以使用 Future.fallbackTo and Future.recoverWith:

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