使用for comprehension将Scala中的Future [Future [(String,String)]]转换为Future [(String,String)]

时间:2014-09-05 02:29:04

标签: scala future for-comprehension

我有一个Future[Future[(String,String)]],我想使用for comprehension将其转换为Future[(String,String)]

2 个答案:

答案 0 :(得分:5)

不一定要理解,一个简单的方法是使用flatMap而不是identity

考虑例如

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

def f: Future[Future[(String,String)]] = Future { Future {("a","aa")} }

然后

f.flatMap(identity)
res: scala.concurrent.Future[(String, String)] = Promise$DefaultPromise@1849937

答案 1 :(得分: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

以防你想用于理解。这就是你如何做到的。