2013-03-20 6 views
5

Voglio utilizzare il set di risultati di una query di ricerca in un altro set di risultati. Non potrei spiegare questa situazione in inglese molto bene. Proverò ad usare del codice.NodeJS - come inviare una variabile ai callback nidificati? (MongoDB trova le domande)

People.find({ name: 'John'}, function(error, allJohns){ 
    for(var i in allJohns){ 
     var currentJohn = allJohns[i]; 
     Animals.find({ name: allJohns[i].petName }, allJohnsPets){ 
      var t = 1; 
      for(var j in allJohnsPets){ 
       console.log("PET NUMBER ", t, " = " currentJohn.name, currentJohn.surname, allJohnsPets[j].name); 
       t++; 
      } 
     } 
    } 
}); 

In primo luogo, ottenere tutte le persone con trovano che sono di nome John. Quindi prendo quelle persone come allJohns.

In secondo luogo, ottengo tutti gli animali domestici di ogni Johns uno per uno in diverse trovare le domande.

Nella seconda richiamata, ottengo di nuovo ogni animale uno per uno. Ma quando voglio mostrare quale John è il loro proprietario, ho sempre avuto lo stesso John.

Quindi, la domanda è: come posso inviare ogni John separatamente al secondo callback annidato e saranno insieme come veri proprietari e animali domestici.

Ho bisogno di copiare ogni John, ma non ho idea di come posso fare questo.

+0

C'è un errore di battitura in quanto sopra? Intendevi e dimentica di scrivere una funzione di callback come secondo argomento di Animals.find()? – ravi

risposta

5

Javascript non ha ambito di blocco, solo ambito di funzione. Invece di for .. in .., utilizzando forEach creerà un nuovo ambito per ogni ciclo:

People.find({ name: 'John'}, function(error, allJohns){ 
    allJohns.forEach(function(currentJohn) { 
    Animals.find({ name: currentJohn.petName }, function(err, allJohnsPets) { 
     allJohnsPets.forEach(function(pet, t) { 
     console.log("PET NUMBER ", t + 1, " = ", currentJohn.name, currentJohn.surname, pet.name); 
     }); 
    }); 
    }); 
}); 
2

devi dare più concentrazione sulla natura asincrona.

People.find({ name: 'John'}, function(error, allJohns){ 
    for(var i=0; i<allJohns.length; i++){ 
    (function(currJohn){ 
     var currentJohn = currJohn; 
     Animals.find({ name: currentJohn.petName }, function(error, allJohnsPets){ 

      for(var j=0; j<allJohnsPets.length; j++){ 
     console.log("PET NUMBER ", (j+1), " = " currentJohn.name, currentJohn.surname, allJohnsPets[j].name); 
      } 
      }) 

     })(allJohns[i]); 
    } 
}); 
Problemi correlati