Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

174
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda