Single promise demo

Uses Q library to demonstrate a promise.

by Lou Mauget

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/1.0.1/q.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<div class="container">
  <h4>Single Promise</h4>

  <div class="jumbotron" id='log'></div>
</div>

CSS

body {
  background-color: LemonChiffon;
}

.jumbotron {
  border: thin solid;
}

JavaScript

'use strict';
// This function demonstrates using a Q library or Kew promise library 
(function() {
  var lineNum = 0;
  var log = function(str, color) {
    var hstr;
    var prefix = str.length ? String(++lineNum) + '. ' : '';
    str = prefix + str;
    if (typeof document !== 'undefined') {
      hstr = str;
      if (typeof color === 'string') {
        hstr = '<span style="color: ' + color + '; font-weight: 900;">' + str + '<span>';
      }
      document.getElementById('log').innerHTML += (hstr + '<br />');
    }
    console.log(str);
  };

  // This function communicates through a promise, 
  // returning that promise from its new deferred wrapper object.
  // That promise can eventually call a then's resolved or rejected
  // callback.
  var longRunningStuff = function() {
    var deferred = Q.defer();
    var delayMS = 3 * 1000;
    var isGood = Math.random() > 0.4;

    // Simulate a long-running process.
    // Return result by setting resolve or rejeect values on the promise.						
    setTimeout(function() {
      var date = new Date();
      log('');
      if (isGood) {
        deferred.resolve('Promise settled as resolved! All clear, Will Robinson!');
      } else {
        deferred.reject('Promise settled as rejected! Danger, Will Robinson! Danger! Storm approaching!');
      }
    }, delayMS);

    // This executes before the timeout callback	
    return deferred.promise;
  };

  (function main() {
    var promise;
    log('Starting ...');
    promise = longRunningStuff();
    log('... pending ...');
    promise.then(

      function(result) {
        log(result, 'blue');
      },
      function(error) {
        log(error, 'red');
      });

    log('');
    log('Q: Where\'s our promise result?');
    log('A: Patience!');
  })()


})();