title: When is it not possible to replace a Promise by Future?
body: <p>Just reading this <a href="http://danielwestheide.com/blog/2013/01/16/the-neophytes-guide-to-scala-part-9-promises-and-futures-in-practice.html" rel="nofollow">article</a> on promises, and the author uses the following example:</p>
  
  <pre><code>def redeemCampaignPledge(): Future[TaxCut] = {
      val p = Promise[TaxCut]()
      Future {
        println("Starting the new legislative period.")
        Thread.sleep(2000)
        //p.success(TaxCut(20))
        //println("We reduced the taxes! You must reelect us 2018!")
        p.failure(LameExcuse("global economy crisis"))
        println("We didn't fullfil our promises, so what?")
      }
      p.future
  }
  
  val taxCutF: Future[TaxCut] = redeemCampaignPledge()
    println("Now they're elected, let's see if they remember their promise.")
    taxCutF.onComplete {
      case Success(TaxCut(reduction)) =&gt;
        println(s"Miracle! Taxes cut by $reduction percent.")
      case Failure(ex) =&gt;
      println(s"They broke the promise again. Because of a ${ex.getMessage}")
    }
  </code></pre>
  
  <p>My question is, can't I just get rid of Promises and rewrite it as:</p>
  
  <pre><code>def redeem(): Future[TaxCut] = Future {
      println("Starting legislative period...!!!!")
      Thread.sleep(2000)
  
      println("We were successful")
      TaxCut(25)
  }
  </code></pre>
  
  <p>What is this second version lacking? I am not fully grasping the value that promises bring.</p>