Понимание обещаний в 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. Любая помощь будет принята с благодарностью.

Ответы на вопрос(1)

Ваш ответ на вопрос