我有两个功能
f1() => Future[T]
f2(t: T) => Future[T1]
Run Code Online (Sandbox Code Playgroud)
我可以得到T1
f1().flatMap(t => f2(t))
Run Code Online (Sandbox Code Playgroud)
但我想得到T和T1,例如(T,T1),我该怎么办呢
您可以在flatMap中映射f2的结果:
f1().flatMap(t => f2(t).map((t, _)))
Run Code Online (Sandbox Code Playgroud)
或使用for-understanding:
for {
t <- f1()
t1 <- f2(t)
} yield (t, t1)
Run Code Online (Sandbox Code Playgroud)
或者,您可以将两个期货压缩为一个返回元组的期货:
val a = f1()
val b = a.flatMap(f2)
val c = a zip b
Run Code Online (Sandbox Code Playgroud)