Skip to content

Instantly share code, notes, and snippets.

@seanzx85
Last active August 29, 2015 14:15
Show Gist options
  • Save seanzx85/d5d534d5e2a272f72e01 to your computer and use it in GitHub Desktop.
Save seanzx85/d5d534d5e2a272f72e01 to your computer and use it in GitHub Desktop.
Q Promise Recursion - NodeJS
/**
*
*/
'use strict';
var q = require('q');
var start = 5;
//Time delayed function
function checkA() {
console.log('Call Check A');
var promise = q.defer();
setTimeout(function () {
console.log('Resolve Check A');
promise.resolve('passCheckA');
}, 500);
return promise.promise;
}
//Recurse function
function recurse(iter, results) {
console.log('Recurse Round %s', iter);
var promise = q.defer();
checkA().then(function () {
setTimeout(function () {
if (iter === 2 && false) { //Enable to see error
console.log('Recurse Failure');
promise.reject('Recurse Failed');
} else if (iter > 0) {
results.push('Round ' + iter);
console.log('Recurse Deeper', results);
recurse(iter - 1, results).then(function(){
promise.resolve(results);
});
} else {
results.push('Final Round ' + iter);
console.log('******Exit Recursion');
promise.resolve(results);
}
}, 50);
}, function () {
promise.reject();
});
return promise.promise;
}
//Kick off demo
recurse(start, []).then(function (results) {
console.log('Results:', results);
}).catch(function (err) {
console.log('Catch Error:', err);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment