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` の結果に影響を与えることは一般的にありませんでござる。しかし、コールバック関数が致命的なエラーを投げると、結果の未来は決して完成しないことに注意してくださいでござる。