1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| const mysql = require('mysql'); const async = require('async');
const pool = mysql.createPool({ host: 'XXXX', user: 'XXXx', password: 'XXX', database: 'databaseName', connectionLimit: 10, port: 3306, waitForConnections: false, charset: 'utf8mb4' });
function execTrans(sqlparamsEntities, callback) { pool.getConnection(function(err, connection) { if(err) { return callback(err, null); } connection.beginTransaction(function(err) { if(err) { return callback(err, null); } console.log(`开始执行transaction,共执行${sqlparamsEntities.length}条数据`); const funcAry = []; sqlparamsEntities.forEach(function(sqlParam) { const temp = function(cb) { const sql = sqlParam.sql; const param = sqlParam.params; connection.query(sql, param, function(tErr) { if(tErr) { return cb(tErr); } else { return cb(null, 'ok'); } }); }; funcAry.push(temp); });
async.series(funcAry, function(err, result) { console.log(`end,transaction error:${err}`); if(err) { connection.rollback(function(err1) { console.log(`transaction error:${err1}`); connection.release(); return callback(err, null); }); } else { connection.commit(function(err) { console.log('transaction info:'); if(err) { console.log(`执行事务失败,${err}`); connection.rollback(function(err) { console.log(`transaction error:${err}`); connection.release(); return callback(err, null); }); } else { connection.release(); return callback(null, result); } }); } }); }); }); }
|