Il significato andThen
che ho appreso da questo answer è un compositore di funzioni.Perché il eThen of Future non concatena il risultato?
dire che
f andThen g andThen h
sarà pari a
h(g(f(x)))
Ciò implica la h function
riceveranno input da g(f(x))
Ma per la andThen
in Future
, tutta la chiusura della seguente andthen riceve sempre il risultato dell'originale 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
}
confronta con
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)
Qual è la ragione per fare Future :: andthen (s) ricevono tutte lo stesso risultato da Future originale invece di concatenamento futuro? Ho osservato che questi concatenati e Allora saranno eseguiti sequenzialmente, quindi la ragione potrebbe non essere per scopi paralleli.
Posso dire che è un'altra versione di onComplete ma restituire "this" in modo che possa associare più gestori di callback "observer" nello stile concatenamento? –
@ChenOT Sì. Praticamente – Odomontois
@ Ma con una differenza. Aggiungerò questo a asnwer – Odomontois