The andThen
co oznacza, że dowiedziałem się z tego answer jest kompozytor funkcji.Dlaczego "The Future of the Future" nie wpływają na wynik?
Powiedzmy że
f andThen g andThen h
wyniesie do
h(g(f(x)))
Oznacza to, że h function
otrzyma wejście od g(f(x))
Ale dla andThen
w Future
, wszystkie zamknięcia następnego andthen zawsze otrzymuje wynik z oryginalnego Future
.
Future{
1
}.andThen{ case Success(x) =>
println(x) // print 1
Thread.sleep(2000)
x * 2
}.andThen{ case Success(x) =>
println(x) // print 1
Thread.sleep(2000)
x * 2
}
porównać do
val func: Function1[Int, Int] = { x: Int =>
x
}.andThen { y =>
println(y) // print 1
y * 2
}.andThen { z =>
println(z) // print 2
z * 2
}
func(1)
Jaki jest powód, aby Future :: andthen (s) otrzymywać wszystkie ten sam wynik z oryginalnym przyszłości zamiast łączenia przyszłości? Zauważyłem, że te łańcuchy i następnie zostaną wykonane sekwencyjnie, więc powodem może nie być równoległy cel.
Czy mogę powiedzieć, że jest to kolejna wersja onComplete, ale zwraca "to", aby mogła powiązać wiele procedur obsługi wywołań zwrotnych "obserwatora" w stylu łączenia? –
@ChenOT Tak. Niemal – Odomontois
@But z jedną różnicą. Dodam to do asnwer – Odomontois