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

124
Vistas
solicitudes secuenciales de transacciones de nodo mssql

Estoy usando el paquete mssql dentro de una función azul... tratando de realizar escrituras secuenciales en una base de datos dentro de una sola transacción. El objetivo es que las transacciones se reviertan si hay un error en cualquiera de ellas. Esto parece estar funcionando con el siguiente código, pero no puedo averiguar cómo devolver si la transacción es exitosa/revertida (y, en última instancia, comunicar esto al cliente). He mirado la documentación de la transacción para mssql pero solo tienen ejemplos para una solicitud ÚNICA. No múltiples solicitudes. ¿Cuál es la mejor manera de hacer esto?

En el siguiente código, Request2 es la solicitud que se supone que fallará debido a una falta de ortografía en el nombre de la tabla. Como dije, parece que la reversión está ocurriendo porque NINGUNA escritura está ocurriendo. Además, el 'error al confirmar la transacción' se registra en la consola... pero no puedo enviar este error a la función azul para luego responder al cliente correctamente. Solo quiero poder detectar un error en la etapa trasaction.commit() y luego devolverlo, pero parece que context.res se está ejecutando de inmediato. ¿Cómo puedo solucionar esto? Obviamente no entiendo las propiedades asíncronas correctamente. ¿Alguien tiene un buen ejemplo de cómo ejecutar consultas secuenciales en una transacción con el nodo mssql? No puedo encontrar ningún buen ejemplo en línea.

 const runQuery = async () => { var errors = []; let pool = await sql.connect(sqlConfig); const transaction = new sql.Transaction(pool); transaction.begin(async (err) => { let rolledBack = false; transaction.on("rollback", (aborted) => { console.log("rolledback"); rolledBack = true; }); const request = new sql.Request(transaction); request.query( "insert into categories (category) values ('Test ')", async (err, result) => { if (err) { console.log("error 1"); errors.push(err); // return "error in req1"; if (!rolledBack) { console.log("rollback 1 below"); await transaction.rollback((err) => { console.log("rolling back 1"); }); } } const request2 = new sql.Request(transaction); request2.query( "insert into adjustment values ('AAA', 0)", async (err, result) => { if (err) { console.log("error 2"); errors.push(err); if (!rolledBack) { console.log("rollback 2 below"); await transaction.rollback((err) => { console.log("rolling back"); // console.log(err); }); } } transaction.commit((err) => { if (err) { console.log("error in committing transaction"); return "error"; // console.log(err); } else { return "success"; } }); } ); } ); });

};

const queryResult = await runQuery();

context.res = { cuerpo: resultado de la consulta, }; };

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

0

Después de manejar el error devuelto por commit(), su función debería devolver el código y el mensaje de error. Luego puede completar la respuesta de la siguiente manera,

 context.res = { status: queryResult.responseCode, body : queryResult.mesg};

Por ejemplo, la función runQuery() podría devolver 400 como código de responseCode y "Algo salió mal, detalles del error" como mesg . También puede registrar sus errores de modo que pueda encontrar mensajes de registro y seguimiento en la hoja de Application Insights para su aplicación de funciones. Para que pueda depurar fácilmente lo que sucedió dentro de su código. Consulte esta documentación para registrar errores.

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