2

I've a Future[Future[(String,String)]] and I want to convert it into a Future[(String,String)] using a for comprehension.

Soumya Simanta
  • 11,523
  • 24
  • 106
  • 161
  • 1
    possible 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 Answers2

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