Futures

play.api.libs.concurrent.Futures
See theFutures companion object
trait Futures

This trait is used to provide non-blocking timeouts and delays on an operation that returns a Future.

You can dependency inject the Futures as follows to create a Future that will timeout after a certain period of time:

class MyService @Inject()(futures: Futures, piCalculator: PiCalculator) extends Timeout {
 def calculateWithTimeout(timeoutDuration: FiniteDuration): Future[Int] = {
   futures.timeout(timeoutDuration)(piCalculator.rawCalculation())
 }
}

And you can also use a delay to return data after a given period of time.

class PiCalculator @Inject()(futures: Futures) {
 def rawCalculation(): Future[Int] = {
   futures.delay(300 millis) { Future.successful(42) }
 }
}

You should check for timeout by using scala.concurrent.Future.recover or scala.concurrent.Future.recoverWith and checking for scala.concurrent.TimeoutException:

val future = myService.calculateWithTimeout(100 millis).recover {
 case _: TimeoutException =>
   -1
}

Attributes

See also
Companion
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes

Members list

Value members

Abstract methods

def delay(duration: FiniteDuration): Future[Done]

Creates a delayed future that is used as a supplier to other futures.

Creates a delayed future that is used as a supplier to other futures.

val future: Future[String] = futures.delay(1 second).map(_ => "hello world!")

Attributes

Returns

a future completed successfully after a delay of duration.

def delayed[A](duration: FiniteDuration)(f: => Future[A]): Future[A]

Creates a future which will be completed after the specified duration.

Creates a future which will be completed after the specified duration.

Type parameters

A

the result type used in the Future.

Value parameters

duration

the duration to delay the future by.

f

the future to delay

Attributes

def timeout[A](timeoutDuration: FiniteDuration)(f: => Future[A]): Future[A]

Creates a future which will resolve to a timeout exception if the given Future has not successfully completed within timeoutDuration.

Creates a future which will resolve to a timeout exception if the given Future has not successfully completed within timeoutDuration.

Note that timeout is not the same as cancellation. Even in case of timeout, the given future will still complete, even though that completed value is not returned.

Type parameters

A

the result type used in the Future.

Value parameters

f

a call by value Future[A]

timeoutDuration

the duration after which a Future.failed(TimeoutException) should be thrown.

Attributes

Returns

the future that completes first, either the failed future, or the operation.