Async node.js confusión de flujo de datos

Gracias por su ayuda … luchando a lo grande con cómo manejar esto correctamente. Estoy en async ahora, habiendo renunciado a mi capacidad para escribir las devoluciones de llamada correctamente. Tengo un fragmento donde paso un conjunto de números aleatorios (cada registro) y los paso a una llamada de mongoose. Tratando de crear un conjunto de datos a partir de las múltiples consultas que paso.

Mi problema es que no importa lo que haya hecho durante 4 horas, la variable “newarray” siempre está vacía.

Gracias por tu ayuda –

async.forEach(arLimit, function(eachrecord, callback){ newarray = new Array; var query = UGC_DB_Model.find({}).skip(eachrecord).limit(-1); query.execFind(function (err, data) { if (err) console.log(err); else { newarray.push(data); } }); callback(null, newarray); }, function(err, result) { if (err) return next(err); console.log("(it's empty): " + result); }); 

Hay varios problemas con su código:

  • async.forEach no pretende “generar” resultados, para eso está async.map ;
  • debe llamar a la callback solo cuando se realiza execFind , y no inmediatamente después de llamarla;
  • tu newarray probablemente no sea necesario;

Así que prueba esto en su lugar:

 async.map(arLimit, function(eachrecord, callback){ var query = UGC_DB_Model.find({}).skip(eachrecord).limit(-1); query.execFind(function (err, data) { if (err) callback(err); // pass error along else { callback(null, [ data ]); // although I think you mean this (because 'data' is probably an array already) // callback(null, data); } }); }, function(err, result) { if (err) return next(err); console.log("(it's empty): " + result); });