Scala FutureのonComplete関数とandThen関数の違いは何ですか？
andThen`と `onComplete` はどちらも、コールバック関数によって未来の結果を観察することができるのだ。しかし、`andThen`は連鎖させることができ、`onComplete`とは異なり、コールバック関数の適用順序を保証しているのだ。さらに、`andThen`に与えられるコールバックは、結果のサブセット（例えば、`Success`のみ、または`Failure`のみ）を処理する部分関数である可能性があるのだ。

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") }.
    .マップ { i =>
      println(s "マップ：$i")
      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 { i =>
    println(s "マップ：$i")
    i
  }
}
```

この場合、`fut`が正常に終了すると、"onComplete1: ...", "onComplete2: ...", "map: ... "が不特定の順序で出力されるのだ。

andThen`は連鎖しますが、コールバック関数が結果の `Future` の結果に影響を与えることは一般的にないのだ。しかし、コールバック関数が致命的なエラーを投げると、結果の未来は決して完成しないことに注意するのだなのだ。