Scala未来会返回什么?
我是Scala新手,正在使用akka和futures开发一个应用程序 我有一个类(C),它处理一个未来并返回一个对象类型X的列表(L)。X有一个字段y,我感兴趣的就是这个字段。(注意:L以前是从ListBuffer类型转换而来的) 在调用C的主类中,处理结果的代码是: 片段A:Scala未来会返回什么?,scala,Scala,我是Scala新手,正在使用akka和futures开发一个应用程序 我有一个类(C),它处理一个未来并返回一个对象类型X的列表(L)。X有一个字段y,我感兴趣的就是这个字段。(注意:L以前是从ListBuffer类型转换而来的) 在调用C的主类中,处理结果的代码是: 片段A: result1.onComplete { result => result.foreach(f = (o: List[X]) => { o.foreach(f = (o:
result1.onComplete {
result =>
result.foreach(f = (o: List[X]) => {
o.foreach(f = (o: x) => {
println(X.y)
})
})
}
我也可以使用以下代码:
片段B:
result1 onSuccess{
case result =>
result.foreach(f = (o: X) => {
println(o.y)
})
}
显然,由于OnSuccess已被弃用,因此第一种形式可能更可取。第二种形式(代码片段B)我可以理解,但我不明白为什么在使用onComplete时,我必须使用嵌套的“foreach”才能得到相同的结果。如果有人能帮忙,因为我还不清楚什么是“结果”(尝试[T]=>U)???实际上是。提前感谢:)如果你看看
的未来。完成后,你会看到它收到一个从Try[T]
(其中T是你未来的类型)到单元的函数
“当此未来完成时,通过异常或值,应用提供的函数”。
“请注意,f的返回值将被丢弃”
Try用于捕获异步计算中的失败,这就是为什么您需要为每个
设置两个,第一个是从Try
中提取成功
列表,第二个是从列表中提取每个元素O
在onSuccess
的情况下,您不需要两个回调函数,因为正如名字所说,只有在Future成功完成时才会调用回调函数
但是,请注意,在Try
上执行foreach
是一个坏主意,因为您没有处理故障,代码也变得难以读取-请尝试此操作
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Success, Failure}
case class Result(data: Int)
val process: Future[List[Result]] =
Future.successful(List(Result(data = 5), Result(data = 3)))
process.onComplete {
case Success(results) =>
for (result <- results) {
println(result.data)
}
case Failure(ex) =>
println(s"Error: ${ex.getMessage}")
}
导入scala.concurrent.Future
导入scala.concurrent.ExecutionContext.Implicits.global
导入scala.util.{成功,失败}
案例类结果(数据:Int)
val进程:未来[列表[结果]]=
Future.successful(列表(结果(数据=5),结果(数据=3)))
过程完成{
案例成功(结果)=>
为了(结果)
println(s“错误:${ex.getMessage}”)
}
能否请您澄清您的问题。我的问题归结为:onComplete和onSuccess方法之间的根本区别是什么,它们需要上述代码的区别。