Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
la función asíncrona está devolviendo indefinido en nodejs

este es mi codigo

 async function checksubsdetails() { try { let update_data = []; db_office.query( `SELECT arn_no,arn_id,cams_email from no_of_arn WHERE cams_email !=''`, async (err, arn_rows) => { if (err) throw err; for (let inx of arn_rows) { // console.log(inx.arn_no) await db_office.query( `SELECT arn_no from cams_subs WHERE arn_no='${inx.arn_no}'`, async (err, subs_rows) => { if (err) throw err; // console.log(subs_rows) if (subs_rows.length == 0) { await db_office.query( `INSERT INTO cams_subs(arn_id, arn_no) values('${inx.arn_id}', '${inx.arn_no}')`, (err, my_cursor) => { if (err) throw err; console.log(("New Data Added for Arn no -> ", inx.arn_no)); update_data.push(inx); } ); } else { console.log("Data Already Exists for arn no ->", inx.arn_no); //console.log(("New Data Added for.lo")) update_data.push(inx); } } ); } return [2, update_data]; } ); } catch (err) { console.log(err); return [1, "Exception While adding Data to Cams Subs"]; } }

Devuelvo [2, update_data] pero no estoy definido para update_data.

No puedo averiguar qué hacer para resolver esto porque los procesos posteriores solo pueden ocurrir después de obtener este valor.

update_data está dando resultado en la declaración if-else que he escrito, pero quiero que devuelva la matriz update_data después del ciclo for.

Por favor, ayúdame en esto.

Gracias

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

@jfriend00 explicó el problema: aquí hay una posible solución que usa la función util.promisify de Node.js para tomar la función db_office.query y convertirla en algo que realmente se puede await .

Por favor, preste atención a los comentarios en el código.

 async function checksubsdetails() { // Promisify the `db_office.query` function (depending on the library, // it may already have a promisified counterpart; please read the docs). const queryP = util.promisify(db_office.query.bind(db_office)); const update_data = []; const arn_rows = await queryP( `SELECT arn_no, arn_id from no_of_arn WHERE cams_email !=''`, ); for (let inx of arn_rows) { // TODO: this is susceptible to race condition attacks since multiple processes // may be doing this loop simultaneously const subs_rows = await queryP( `SELECT arn_no from cams_subs WHERE arn_no = '${inx.arn_no}'`, // TODO: fix SQL injection vulnerability ); if (subs_rows.length === 0) { await queryP( `INSERT INTO cams_subs(arn_id, arn_no) values ('${inx.arn_id}', '${inx.arn_no}')`, // TODO: fix SQL injection vulnerability ); console.log("New Data Added for Arn no -> ", inx.arn_no); } else { console.log("Data Already Exists for arn no ->", inx.arn_no); } update_data.push(inx); } return update_data; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Dentro de la línea de función n.° 4, está llamando a db_office.query() sin esperar . Así que esta promesa no se cumplió. Entonces, justo después de ejecutar la función, esa promesa se agrega en el ciclo de eventos asincrónicos y se devuelve. No estás esperando a que se cumpla la promesa. Cuando esa promesa se cumple después de la devolución, está viendo la salida en la consola. Pruebe con await y devuelva su devolución después de que se cumpla la promesa

 await db_office.query() // return after every promise is fulfilled
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda