了解Scala Future和Thhen

时间:2017-07-11 08:46:25

标签: scala future

我尝试使用andThen方法注册未来的行动阶段。像这样:

implicit val executionContext = ExecutionContext.global

val f = Future(0)
f.andThen {
  case r => println(r.get + "1")
} andThen {
  case r => println(r.get + "2")
}
  

由于此方法异步执行而不生成   返回值,抛出的任何非致命异常都将报告给   ExecutionContext。

异步是什么意思?它意味着与未来的执行本身异步?

1 个答案:

答案 0 :(得分:8)

  

异步是什么意思?它意味着异步   未来的执行本身?

这意味着andThen的执行将在原始ExecutionContext完成后由Future[T]提供的给定线程上发生。

如果我们看一下实施:

def andThen[U](pf: PartialFunction[Try[T], U])(implicit executor: ExecutionContext): Future[T] = {
  val p = Promise[T]()
  onComplete {
    case r => try pf.applyOrElse[Try[T], Any](r, Predef.conforms[Try[T]]) finally p complete r
  }
  p.future
}

此方法是Future.onComplete之上的智能包装器,它是一种返回Unit的副作用方法。它应用给定的函数,并返回原始的Future[T]结果。正如文档所述,当您想要保证将来注册的几个onComplete回调的顺序时,它非常有用。