title: Do Futures always end up not returning anything?
body: <p>Given that we must avoid...</p>
  
  <p>1) Modifying state
  2) Blocking</p>
  
  <p>...what is a correct end-to-end usage for a Future?</p>
  
  <p>The general practice in using Futures seems to be transforming them into other Futures by using map, flatMap etc. but it's no good creating Futures forever. </p>
  
  <p>Will there always be a call to onComplete somewhere, with methods writing the result of the Future to somewhere external to the application (e.g. web socket; the console; a message broker) or is there a non-blocking way of accessing the result?</p>
  
  <p>All of the information on Futures in the Scaladocs - <a href="http://docs.scala-lang.org/overviews/core/futures.html" rel="nofollow">http://docs.scala-lang.org/overviews/core/futures.html</a> seem to end up writing to the console. onComplete doesn't return anything, so presumably we have to end up doing some "fire-and-forget" IO.</p>
  
  <p>e.g. a call to <code>println</code></p>
  
  <pre><code>f onComplete {
    case Success(number) =&gt; println(number)
    case Failure(err) =&gt; println("An error has occured: " + err.getMessage)
  }
  </code></pre>
  
  <p>But what about in more complex cases where we want to do more with the result of the Future?</p>
  
  <p>As an example, in the Play framework Action.async can return a Future[Result] and the framework handles the rest. Will it eventually have to expect never to get a result from the Future?</p>
  
  <p>We know the user needs to be returned a  <code>Result</code>, so how can a framework do this using only a Unit method?</p>
  
  <p>Is there a non-blocking way to retrieve the value of a future and use it elsewhere within the application, or is a call to Await inevitable?</p>