Tengo 2 colecciones de bases de datos y quiero usar el resultado de la primera consulta, como entrada para la segunda consulta, mientras me aseguro de que todo el código se ejecute secuencialmente. Así es como se ve mi código:
app.post("/Search", async (req, res) => { criteria = req.body.criteria c = req.body.c total = req.body.total try { const fquery = await db.find(criteria); console.log(fquery);//print 1 let r = fquery.filter(async function (element) { let f = element.field; console.log(f);//print 2 const squery = await db2.find({field:f}); console.log(squery);//print 6 let cond = squery.length == 0;//result set empty if (c == value) { cond2 = //some condition } else if (c == value2) { cond2 = //another condition } else { cond2 =//3rd condition } console.log(cond);//print 7 console.log(cond2);//print 8 return (cond || cond2); }) console.log(fquery);//print 3 console.log("xxxx111");//print 4 console.log(r);//print 5 res.json(r); } catch (err) { res.json({ message: err }); } });Actualmente, el código funciona secuencialmente hasta que alcanza (const squery = await db2.find({field:f});) en lugar de esperar a que termine, pasa a los registros después de la función de filtro, en una secuencia como yo han comentado al lado de cada console.log. Primero quiero que termine la función de filtro, luego imprima y envíe el resultado al usuario. ¿Cómo puedo hacer eso?
Puede pasar dos parámetros en el registro de la consola
Asigne números para verificar la secuencia Ej. Console.log(1,"mensaje u objeto");
Y Usar filtro con una colección de promesas es usar Promise.all y luego aplicar la función a su colección de resultados.
Enlace de referencia¿Cómo usar Array.prototype.filter con async?
Otro caso
Si el problema está relacionado con async/await en mongodb. Menciono la pregunta relacionada con la referencia async/await a continuación.
Consultas asincrónicas/en espera del controlador mongodb de Node.js