const mysql = require('mysql');

exports.query = (sqlList) => new Promise((outResolve, reject) => {
  const connection = mysql.createConnection({
      host : '127.0.0.1',
      port: '3306',
      user : 'xxx',
      password : 'xxxx',
      database : 'xxx',
  });
  const obj = {};
  // 开始一个事务
  connection.beginTransaction((err) => {
    obj.err = err;
    if(err) {
      return outResolve(obj);
    };
    // 使用 Promise.all 来确保所有插入操作都完成  
    Promise.all(sqlList.map((item) => {  
      return new Promise((resolve, reject) => {  
        connection.query(item.sql, item.values, function(error, results, fields) {  
          if (error) {  
            reject(error); // 如果有错误,Promise 将被拒绝  
          } else {  
            resolve(results); // 否则,Promise 将被解决  
          }  
        });  
      });  
    })).then((results) => {
      console.log('All orders inserted successfully');  
      // 如果没有错误,提交事务
      connection.commit();
      obj.result = results;
      outResolve(obj);
    }).catch((err) => {
      console.error('Error inserting orders:', err);  
      // 如果有错误,回滚事务  
      return connection.rollback(() => {
        obj.err = err;
        outResolve(obj);
        // throw err;
      });  
    }).then(() => {  
      connection.end(); // 关闭连接  
    });
  });
});

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐