mysqljs-mysql事务太冗长了。更简单的选择?

时间:2018-04-02 07:39:58

标签: javascript mysql node.js transactions

以下是来自official github repo

的node-mysql的事务片段
connection.beginTransaction(function(err) {
  if (err) { throw err; }
  connection.query('INSERT INTO posts SET title=?', title, function (error, results, fields) {
    if (error) {
      return connection.rollback(function() {
        throw error;
      });
    }

    var log = 'Post ' + results.insertId + ' added';

    connection.query('INSERT INTO log SET data=?', log, function (error, results, fields) {
      if (error) {
        return connection.rollback(function() {
          throw error;
        });
      }
      connection.commit(function(err) {
        if (err) {
          return connection.rollback(function() {
            throw err;
          });
        }
        console.log('success!');
      });
    });
  });
});

我觉得这里的锅炉太多了。是不是有一种更简洁的交易方式,比如这样?:

/* invalid code */
connection.beginTransaction();
const q1 = connection.query("SELECT 1;");
const q2 = connection.query("SELECT 2;");
const q3 = connection.query("SELECT 3;");
if (q1 && q2 && q3) {
  connection.commit();
else {
  connection.rollback();
}

虽然在这种情况下会同步。

0 个答案:

没有答案