将值更改为变量的期货和回调
Futures and callbacks for changing value to variable
我目前正在为 scala 中 Future 回调的逻辑而苦苦挣扎。
我正在尝试获得一种应该执行以下操作的方法:
- 如果 x 成功完成,则完成值为 x
- 如果 x 失败,则以值 y 完成,最后
- 如果 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
}
}
我目前正在为 scala 中 Future 回调的逻辑而苦苦挣扎。 我正在尝试获得一种应该执行以下操作的方法:
- 如果 x 成功完成,则完成值为 x
- 如果 x 失败,则以值 y 完成,最后
- 如果 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
}
}