Значение andThen
, которое я узнал из этого , является композитором функции.
Скажите, что
f andThen g andThen h
будет равно
h(g(f(x)))
Это означает, что h function
получит вход от g(f(x))
Но для andThen
in Future
все замыкание следующего иThen всегда получает результат от оригинала 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
}
сравните с
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)
В чем причина того, чтобы Future:: andThen (s) получал все тот же результат от оригинального Future вместо цепочки Future? Я заметил, что эти прикованные и затем будут выполняться последовательно, поэтому причина может быть не для параллельных целей.