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

248
Vistas
Promesa que no devuelve nada

Estoy tratando de usar la clase de transacción del paquete mssql de nodejs. Entonces, mientras leía en http://www.dotnetcurry.com/nodejs/1238/connect-sql-server-nodejs-mssql-package , hice lo siguiente:

 Db.prototype.transaction = function() { return new Promise((resolve, reject) => { pool.connect().then(conn => { let transaction = new mssql.Transaction(conn).begin().then(() => { new mssql.Request(transaction).query("SELECT * FROM ParkingSlot").then(() => { transaction.commit().then((recordset) => { conn.close(); resolve(recordset); }).catch(reject) }).catch(reject); }).catch(reject) }); }); };

En la función de llamada, hice db.transaction().then(console.dir); para generar cualquier resultado en una consola. Pero no pasa nada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es porque alguna función de mssql que usé en las cadenas no devolvió nada, por lo que cuando la promesa está pendiente, funcionará sin nada, como se puede ver en la cadena catch en la llamada principal.

En segundo lugar, para usar mssql de nodejs con transacciones, la conexión debe estar siempre abierta (en mi caso, en el constructor) y solo tengo que lidiar con transacciones.

Finalmente, no tengo que crear mi solicitud o transacción con un nuevo objeto. La nueva instancia puede ser recuperada por ConnectionPool::transaction o ConnectionPool::Request

Así que aquí está el código final:

 transaction(q) { return new Promise((resolve, reject) => { let t = connexion.transaction() t.begin().then(() => { let r = t.request(); r.query(q).then((recordset) => { //console.log(recordset) t.commit().then((re) => { conn.close(); }).catch(reject); resolve(recordset); }) }); }); }

Tenga en cuenta que la sintaxis del código es diferente, porque paso la sintaxis de clase ES6, mejor legible.

over 4 years ago · Santiago Trujillo 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