Этот код работает так, как ожидалось:
val f1 = Future {
println("start")
}.flatMap { _ =>
Future { Thread.sleep(100); "done" }
}.andThen {
case Success(x) => println(x)
}
Await.ready(f1, Duration.Inf)
Выход:
start
done
Однако этот код не:
val f2 = Future {
println("start")
}.andThen { case Success(x) =>
Future { Thread.sleep(100); "done" }.foreach(println)
}
Await.ready(f2, Duration.Inf)
Выход
start
Итак, мой вопрос заключается в том, как мне связать серию обратных вызовов, которые выполняют побочные эффекты, только если эти обратные вызовы также используют фьючерсы. Мне мой второй блок кода кажется более «правильным», поскольку побочный эффект содержится в одном шаге цепочки обратного вызова.