Scala中Future的onComplete和andThen函式有什麼區別？
“andThen”和“onComplete”都允許您透過回撥函式觀察未來的結果。但是，“andThen”可以連結，並且與“onComplete”不同，它保證回撥函式的應用順序。此外，給予“andThen”的回撥可以是部分函式，​​僅處理結果的子集（例如，僅“成功”或僅“失敗”）。

考慮以下使用“andThen”和“map”的示例：

````
def demoAndThen(fut: Future[Int]): Future[Int] = {
  fut.andThen { case Success(value) => println(s"andThen1: $value") }
    .andThen { case Success(value) => println(s"andThen2: $value") }
    .map { 我 =>
      println(s"地圖：$i")
      我
    }
}
````

當 `fut` 成功完成時，將按順序列印“andthen1: ...”、“andThen2: ...”和“map: ...”。

考慮使用“onComplete”和“map”的類似示例：

````
def demoOnComplete(fut: Future[Int]): Future[Int] = {
  fut.onComplete { t: Try[Int] => println(s"onComplete1: $t") }
  fut.onComplete { t: Try[Int] => println(s"onComplete2: $t") }
  fut.map { 我 =>
    println(s"地圖：$i")
    我
  }
}
````

在這種情況下，當 `fut` 成功完成時，“onComplete1: ...”、“onComplete2: ...”和“map: ...”將以某種未指定的順序列印。

儘管“andThen”是鍊式的，但回撥函式通常不會影響“Future”的結果。但請注意：如果回撥丟擲一些致命錯誤，則最終的 future 將永遠不會完成。