2015-10-09 9 views

risposta

0

ho capito male l'uso del callback() nella libreria async.js. In questo articolo mi ha aiutato a ottenere una comprensione: http://www.sebastianseilund.com/nodejs-async-in-practice Questa è stata la mia soluzione:

exports.buildFamily = function(item_id, done){ 
    console.log('API:buildFamily'); 

    var extendedFamily={} 
    exports.getItembyId(item_id, function(err, item){ 
     if(err){throw err} 
     extendedFamily=item; 
     if(item.descendants){ 
      extendedFamily.kids=[] 
      async.eachSeries(item.descendants, function(item_id, callback){ 
       exports.getItembyId(item_id, function(err, item){ 
        if(err){throw err} 
        if(item.descendants){ 
         exports.buildFamily(item.item_id, function(err, family){ 
          extendedFamily.kids.push(family); 
          callback(); 
         }) 
        }else{ 
         extendedFamily.kids.push(item); 
         callback(); 
        }        
       }) 
      }, function(err){ 
       done(null, extendedFamily) 
      }) 

     }else{ 
      done(null, extendedFamily) 
     } 
    }); 
} 
2

La logica è un po 'complicata, quindi mi assicurerei che per prima cosa andasse bene. Ecco alcune cose che probabilmente ti sei perso. conta += come accennato in precedenza. Nessuna richiamata all'interno del tuo iteratore e spingevi anche la famiglia all'interno di extendedFamily.kids due volte.

count += item.descendants.length; 
console.log('outercount ' + count); 
async.eachSeries(item.descendants, function(item, cb) {     
    count--; 
    console.log('item: ' + item); 
    exports.buildFamily(item, function(err, family){ 
     console.log('deepcount: ' + count); 
     if(count===0){ return mback(null, extendedFamily);} 
     else { 
      extendedFamily.kids.push(family); 
      cb(); 
     } 
    }) 
})