I've a Future[Future[(String,String)]]
and I want to convert it into a Future[(String,String)]
using a for comprehension.
Asked
Active
Viewed 756 times
2

Soumya Simanta
- 11,523
- 24
- 106
- 161
-
1possible duplicate of [How can I flatten this Future\[T\] structure?](http://stackoverflow.com/questions/15835222/how-can-i-flatten-this-futuret-structure) – Rob Napier Sep 05 '14 at 02:37
2 Answers
6
Not necessarily with a for comprehension, a simple approach involves the use of flatMap
over identity
.
Consider for instance
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
def f: Future[Future[(String,String)]] = Future { Future {("a","aa")} }
Then
f.flatMap(identity)
res: scala.concurrent.Future[(String, String)] = Promise$DefaultPromise@1849937

elm
- 20,117
- 14
- 67
- 113
1
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
val futureOfFutures: Future[Future[(String,String)]] = Future { Future {("a","aa")} }
for(futureOfFuture <- futureOfFutures; futureResult <- futureOfFuture) yield futureResult
Just in case you wanted to use for comprehension. This is how you do it.

deepthi
- 685
- 3
- 9