Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala未来会返回什么?_Scala - Fatal编程技术网

Scala未来会返回什么?

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:

我是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: 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方法之间的根本区别是什么,它们需要上述代码的区别。