Code
scala
import scala.concurrent.{Future, ExecutionContext}
import scala.concurrent.duration._
import ExecutionContext.Implicits.global
def fetchUser(id: Int): Future[String] = Future {
Thread.sleep(100)
s"user-$id"
}
// Compose futures
val future = for {
u1 <- fetchUser(1)
u2 <- fetchUser(2)
} yield s"$u1 and $u2"
// Callback
future.onComplete {
case util.Success(v) => println(v)
case util.Failure(e) => println(s"Error: $e")
}
// Block (avoid in production)
val result = scala.concurrent.Await.result(future, 5.seconds)