Last active
August 29, 2015 14:15
-
-
Save seanzx85/d5d534d5e2a272f72e01 to your computer and use it in GitHub Desktop.
Q Promise Recursion - NodeJS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
*/ | |
'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