Necesito ayuda con la naturaleza asincrónica de node.js. Tengo un bucle for, que recopila datos de la base de datos. "resultado" es una matriz, que luego debería devolverse a la función principal.Devolución de llamada después de terminar for-loop en node.js
user_collection.findOne({
_id : uid
}, function(error, user) {
if(error)
callback(error)
else {
for(var j = 0; j < user.contacts.length; j++) {
if(user.contacts[j].accepted == 'true') {
user_collection.findOne({
_id : user.contacts[j].contactId
}, function(error, user) {
result.push(user);
})
}
}
callback(null, result); // This callback executes before the for-loop ends, ofc
}
});
¿Cómo puedo garantizar que la devolución de llamada se ejecute una vez finalizado el ciclo?
Versión de trabajo con async: 'user_collection.findOne ({ \t \t \t \t _id: userId \t \t \t}, la función (error, el usuario) { \t \t \t \t si (error) \t \t \t \t \t de devolución de llamada (error) \t \t \t \t else { \t \t \t \t \t async.forEach (user.contac ts, función (contacto, devolución de llamada) { \t \t \t \t \t \t console.log (contacto); \t \t \t \t \t \t si (== contact.accepted 'verdadero') { \t \t \t \t \t \t \t user_collection.findOne ({ \t \t \t \t \t \t \t \t _id: contact.contactId \t \t \t \t \t \t \t}, fu ncio (error, de contacto) { \t \t \t \t \t \t \t \t result.push (contacto); \t \t \t \t \t \t \t \t callback(); \t \t \t \t \t \t \t}) \t \t \t \t \t \t} \t \t \t \t \t}, la función (error) {devolución de llamada (error, resultado)}) \t \t \t \t} \t \t \t}); ' – johnny