Понимание обещаний в node.js для рекурсивной функции
Я пытаюсь использовать рекурсивные вызовы, чтобы получить данные из redis, останавливаясь и возвращаясь, когда члены возвращают ноль.
Поэтому мои данные добавляются так:
SADD parents.
SADD parents.
...
И окончательные данные должны выглядеть так:
[
{
label: ,
parents: [
{ label: ,
parents: [ {label: }, {label: }] },
{ label: }
]
}
]
Вот'это код, который яя возиться (вроде как булыжник из разных источников), но я понятия не имею, что яя делаю. Не уверен, что этот код даже полезен, я могу быть не в курсе.
var redis = require('node-redis');
var r_client = redis.createClient();
var Q = require('q');
function getFromRedis(nodeName){
var ret = Q.defer();
r_client.smembers('parents.' + nodeName,function(err,val){
if (err) ret.reject(err);
else {
var constructedObject={}; //this is our returned object
var dependents=[];
if (val)
{
for (var k in val){ //iterate the keys in val
constructedObject.name = val[k];
dependents.push(getFromRedis(val[k])
.then(function(subVal){
constructedObject[k]=subVal;
return ret.promise;
})
);
}
}
else { return [] }
}
Q.all(dependents)
.then(function(){ret.resolve(constructedObject);},ret.reject.bind(ret));
});
return ret;
}
getFromRedis( 'greg', function(out) {console.log('Final output: ' + JSON.stringify( out ))} );
Я могу посмотреть на примеры и теоретически увидеть, как этодолжен работать, но я могуЯ не могу понять, как это должно работать с реализацией q. Любая помощь будет принята с благодарностью.