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

170
Vistas
¿Cómo usar una segunda consulta en una Promesa en JS? usando mysql db

Básicamente, obtuve un pedido de creación que necesita agregar el pedido a la base de datos, y todos los productos en el pedido en una tabla adicional de Orderline.

He estado probando diferentes formas de hacer que la segunda consulta funcione, pero lo único que se inserta en la base de datos son los datos de la primera consulta.

la segunda consulta también necesita usar la identificación del pedido insertado de la primera consulta. ya que la base de datos usa autoincremento para la identificación del pedido.

 CreateOrder: (req) => { return new Promise((resolve, reject) => { const sqlInsert = 'INSERT INTO web3.orders (Created, firstName, lastName, street, number, postalCode, city, telephone, email, totalPrice) VALUES (?,?,?,?,?,?,?,?,?,?);'; const sqlInsert2 = 'INSERT INTO web3.orderline (orderId,productId,qty,price) VALUES (?,?,?,?);'; db.query(sqlInsert, [ req.body.Created, req.body.firstName, req.body.lastName, req.body.street, req.body.number, req.body.postalCode, req.body.city, req.body.telephone, req.body.email, req.body.totalPrice], (err, result, fields) => { if (err) { reject(err); } else { resolve(result); } }); db.query(sqlInsert2, [ result.insertId, req.body.producten.id, req.body.producten.cartQuantity, req.body.producten.price], (err, result, fields) => { if (err) { reject(err); } else { resolve(result); } }); }); }, }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Necesitará dos promesas: una para cada consulta. Y el segundo debe crearse solo cuando el primero se haya resuelto.

Una buena manera de hacer esto es db.query en una nueva función, y solo usar esa función a partir de ese momento. Así que define esto primero:

 const promiseQuery = (sql, params) => new Promise((resolve, reject) => db.query(sql, params, (err, result, fields) => err ? reject(err) : resolve(result)) );

En segundo lugar, puede hacer que su CreateOrder una función async para que pueda usar await :

 async CreateOrder: (req) => { const sqlInsert = 'INSERT INTO web3.orders (Created, firstName, lastName, street, number, postalCode, city, telephone, email, totalPrice) VALUES (?,?,?,?,?,?,?,?,?,?);'; const sqlInsert2 = 'INSERT INTO web3.orderline (orderId,productId,qty,price) VALUES (?,?,?,?);'; let result = await promiseQuery(sqlInsert, [ req.body.Created, req.body.firstName, req.body.lastName, req.body.street, req.body.number, req.body.postalCode, req.body.city, req.body.telephone, req.body.email, req.body.totalPrice ]); await promiseQuery(sqlInsert2, [ result.insertId, req.body.producten.id, req.body.producten.cartQuantity, req.body.producten.price ]); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba esto:

 CreateOrder: (req) => { const { Created, firstName, lastName, street, number, postalCode, city, telephone, email, totalPrice } = req.body let results = {} return new Promise((resolve, reject) => { const sqlInsert = 'INSERT INTO web3.orders (Created, firstName, lastName, street, number, postalCode, city, telephone, email, totalPrice) VALUES (?,?,?,?,?,?,?,?,?,?);'; const sqlInsert2 = 'INSERT INTO web3.orderline (orderId,productId,qty,price) VALUES (?,?,?,?);'; db.query(sqlInsert, [Created, firstName, lastName, street, number, postalCode, city, telephone, email, totalPrice], (err, result, fields) => { console.log(result) results.insertId = result.id }); db.query(sqlInsert2, [ results.insertId, req.body.producten.id, req.body.producten.cartQuantity, req.body.producten.price], (err, result, fields) => { if (err) { reject(err); } else { resolve(result); } }); }); }, }

Supongo que en su código inicial está resolviendo la promesa en el primer db.query , lo que da como resultado la finalización de la promesa.

about 4 years ago · Juan Pablo Isaza Denunciar

0

el código anterior es correcto, el mismo flujo funciona aquí

 async function CreateOrder(req) { const sqlInsert = 'INSERT INTO legs (leg) VALUES (?);'; const sqlInsert2 = 'INSERT INTO destinations (destination,area) VALUES (?,?);'; let result = await promiseQuery(sqlInsert, [ "lw" ]); let res= await promiseQuery(sqlInsert2, [ "test", "test location" ]); console.log(res) } const promiseQuery = (sql, params) => new Promise((resolve, reject) => db.query(sql, params, (err, result, fields) => err ? reject(err) : resolve(result)) ); async function test(){ await CreateOrder() }

intente verificar si alguna de las claves no está definida o si hay una discrepancia en el tipo de campo y el valor que está pasando

si req.body.producten es una matriz , debe realizar la consulta para cada iteración

 async CreateOrder: (req) => { const sqlInsert = 'INSERT INTO web3.orders (Created, firstName, lastName, street, number, postalCode, city, telephone, email, totalPrice) VALUES (?,?,?,?,?,?,?,?,?,?);'; const sqlInsert2 = 'INSERT INTO web3.orderline (orderId,productId,qty,price) VALUES (?,?,?,?);'; let result = await promiseQuery(sqlInsert, [ req.body.Created, req.body.firstName, req.body.lastName, req.body.street, req.body.number, req.body.postalCode, req.body.city, req.body.telephone, req.body.email, req.body.totalPrice ]); for (let ele of req.body.producten){ await promiseQuery(sqlInsert2, [ result.insertId, ele.id, ele.cartQuantity, ele.price ]); } }
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