I\'m trying to use recursive calls to get data out of redis, stopping and returning when the members return null.
So my data is added like this:
SADD
r_client.smembers() and when invoking your getFromRedis methodI can see only one specific mistake that would keep your script from working:
return [];
does not have any effect from the callback. So, ret is never going to be resolved in this case. You would do ret.resolve([]); return; if at all. However, there are better solutions that let you use return again.
To restructure your script, there are two points:
then to transform its result then - synchronously returning the tree leaves or a promise for the descendant-getting computations.dependent, but get the whole result and build the construct in one single step.function getFromRedis(nodeName){
return Q.ninvoke(r_client, "smembers", 'parents.' + nodeName).then(function(val) {
// this is our returned object
var constructedObject = {label: nodeName};
if (val) {
var dependents = val.map(function(par) {
// get a promise for the next level
return getFromRedis(nodeName+"."+par.toString());
});
return Q.all(dependents).then(function(dependentResults) {
constructedObject.parents = dependentResults;
return constructedObject;
});
} else {
return constructedObject; // without parents
}
});
}
getFromRedis( 'greg' ).done(function(out) {
console.log('Final output: ' + JSON.stringify( out ));
});