As you probably understood, the result of calling run is to create a Future that will be resolved at some later point.
While this means that ultimately somewhere in the code, the future will have to wait as you show in your answer, this can and should be delayed as late as possible. If you work with, for example, the Play platform, use async Actions and let Play process it for you.
Meanwhile, working with Future , like any other monadic construct (for example, Option ), is a call to map , flatMap , onSuccess , etc., to link your calculations inside the common Future context.
source share