Asynchronous Actions
Suppose that we are at a food court and place an order to eat something at a kiosk, we are given a token and a bill. Later, when the order is ready, the kiosk flashes the token number, and upon noticing it, we collect the order.
This is similar to a request with an asynchronous response cycle, where the kiosk acts like the server, the order acts similar to a request, and the token as a promise, which gets resolved when the order is ready.
Most operations are better handled asynchronously. This is also mostly preferred since it does not block server resources until the operation is completed.
Play Action is a helper object, which extends the ActionBuilder
trait. The apply method of the ActionBuilder
trait implements the Action
trait, which we saw earlier. Let's take a look at the relevant code from the ActionBuilder
trait:
trait ActionBuilder[+R[_]] extends ActionFunction[Request, R] { self => final def apply[A](bodyParser: BodyParser[A])(block: R[A] => ...