来自onComplete的Scala返回值
我如何在Scala中构造onComplete以这样做: 图1来自onComplete的Scala返回值,scala,Scala,我如何在Scala中构造onComplete以这样做: 图1 { var x; if(result.isFailure){ x = foo() // foo is a future } if(result.isSuccess){ x = 5 } bar(x) } 我想我可以这样做: 图2 var x = foo onComplete { case Success(x) => 5 case Failure(t) => foo(
{
var x;
if(result.isFailure){
x = foo() // foo is a future
}
if(result.isSuccess){
x = 5
}
bar(x)
}
我想我可以这样做:
图2
var x = foo onComplete {
case Success(x) => 5
case Failure(t) => foo() //foo is a future
}
bar(x)
但是onComplete、onFailure和onSuccess都将单元作为其返回类型
onComplete[U](f: (Try[T]) ⇒ U)(implicit executor: ExecutionContext): Unit
onSuccess[U](pf: PartialFunction[T, U])(implicit executor: ExecutionContext): Unit
onFailure[U](pf: PartialFunction[Throwable, U])(implicit executor: ExecutionContext): Unit
如果不使用var,如何实现图2所示的目标?您可以通过
valx:Future[Int]=foo.map(x=>5).recover{case f=>foo()}
//为你的未来做更多的工作
x、 地图(条形图)
假设foo:Future[\u]
和foo():Int
不建议通过等待将来的结果来阻止当前线程。相反,您应该在处理result
future的结果时调用bar()函数
result map {r =>
5
} recover {
case _ => foo()
} map {r =>
bar(r)
}
什么是“福”?A未来
?我认为你应该充实一下你的例子。@mattinbits,谢谢,编辑了这个问题。你能想到在没有等待
不阻塞的情况下怎么做吗?@krzasteka,我在这里只使用了Await
来可视化在计算的某个点,当您想要检索未来的结果时,您必须等待它。但是,您可以将进一步的操作链接到未来的x
,这是正确的。难道不只是恢复捕获的异常吗?失败会无一例外地出现吗?我只是好奇的问一下。只有例外,未来才会失败。或者它可以被抛出而不被捕获在未来的体内,或者,例如,创建未来的承诺是通过失败方法完成的,该方法使用Throwable.Awesome参数化。谢谢@Alexander有时你想要,恢复只从初始结果恢复,而不被输入酒吧。。。六羟甲基三聚氰胺六甲醚