Futures
- przyklad http
- map : A -> Result
val overallAvailability: Future[Option[Boolean]] =
allSitesAvailable.map { a =>
Option(a)
} recover {
case ce: java.net.ConnectionException => None
}
def fileExists(path: String): Future[Boolean] = Future {
blocking {
new java.io.File(path).exists
}
}
recover
def authenticationErrorHandler: PartialFunction[Throwable, Result] = {
(...)
}
val recoveredAuthentication: Future[Result] =
authentication.recover(authenticationErrorHandler)
//i tutaj różne webowestatusy
val timeoutFuture = Promise.timeout(
"Authentication service unresponsive", 2.seconds
)
Future.firstCompletedOf(
Seq(authentication, timeoutFuture)
)
recover recoverWith
- przyklad z Future[Unit]
cancelation
blocking
Future{
blocking{
sleep(5000)
}
}
Monady i Applicative
for{
f1 <- Future(1)
f2 <- Future(2)
} yield "f2 zacznie sie dopiero jak skonczy sie f1"