2017-07-11 45 views
2

我正在嘗試使用andThen方法來註冊未來的行動階段。就像這樣:瞭解Scala未來和然後

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。

是什麼意思異步?它意味着與將來的執行本身是不同步的?

回答

7

是什麼意思異步?這意味着異步到 未來執行本身?

這意味着andThen執行將發生始發Future[T]完成後由ExecutionContext提供一個給定的線程上。

如果我們看看實現:

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回調的順序時,它非常有用。