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!');
})()
})();