dbHelper.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // const pool = require('../db/mysql') // 导入pool对象
  2. const pool = require('../pool.js')
  3. module.exports = function execTransection(sqlArr) {
  4. return new Promise((resolve, reject) => {
  5. var promiseArr = []
  6. pool.getConnection(function (err, connection) {
  7. if (err) {
  8. return reject(err)
  9. }
  10. connection.beginTransaction((err) => {
  11. if (err) {
  12. return reject('开启事务失败')
  13. }
  14. // 将所有需要执行的sql封装为数组
  15. promiseArr = sqlArr.map(({ sql, values }) => {
  16. return new Promise((resolve, reject) => {
  17. connection.query(sql, values, (e, rows, fields) => {
  18. e ? reject(e) : resolve({ rows, success: true })
  19. })
  20. })
  21. })
  22. // Promise调用所有sql,一旦出错,回滚,否则,提交事务并释放链接
  23. Promise.all(promiseArr)
  24. .then((res) => {
  25. connection.commit((error) => {
  26. if (error) {
  27. console.log('事务提交失败' + error)
  28. reject(error)
  29. }
  30. })
  31. connection.release() // 释放链接
  32. resolve({ res })
  33. })
  34. .catch((err) => {
  35. connection.rollback(() => {
  36. console.log('数据操作回滚' + err)
  37. })
  38. reject(err)
  39. })
  40. })
  41. })
  42. })
  43. }