javascript - 如何处理交易错误?

标签 javascript mysql node.js node-mysql

假设我在 HTTP 请求处理程序中有以下代码:

// these come from the HTTP request payload.
var channel = {};
var screencast ={};

try {
  connection.beginTransaction(function(err) {
    if (err) { 
      throw err; 
    }
    connection.query('INSERT INTO Channels SET ?', channel, function (err, result) {
      if (err) { 
        connection.rollback(function() {
          throw err;
        });
      }
      connection.query('INSERT INTO Screencasts SET ?', screencast, function (err, result) {
        if (err) { 
          connection.rollback(function() {
            throw err;
          });
        }
        connection.commit(function(err) {
          if (err) { 
            connection.rollback(function() {
              throw err;
            });
          }
          console.log('success!');
        });
      });
    });
  });
} catch (err) {
  // render error page or something like that.
  console.log(err)
}

当发生错误时,我希望调用 catch block - 但事实并非如此。 为什么不呢?

如果我不能捕获错误,我不明白抛出这么多错误有什么意义。有人可以解释一下吗?

此外,如果我不能依赖 catch block ,我如何检测到发生错误然后执行某事

(我对这段代码知之甚少,因为我改编了一个example。)

最佳答案

花一些时间了解promise!

var mysql   = require('mysql');
var Promise = require('bluebird');
Promise.promisifyAll(require('mysql/lib/Connection').prototype);

connection.beginTransactionAsync().then(function() {
  return connection.queryAsync('INSERT INTO Channels SET ?', channel);
}).then(function() {
  return connection.queryAsync('INSERT INTO Screencasts1 SET ?', screencast);
}).then(function() {
  return connection.commit();
}).error(function(e) {
  connection.rollback();
});

关于javascript - 如何处理交易错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053051/

相关文章:

javascript - 复杂JSON到HTML表

javascript - Glyphicon Bootstrap v3 未加载

php - 从上次事件的 mysql 表中减去 time()?

javascript - 如何在 JavaScript 中将 MSSQL 日期时间整数转换为 YYYY/mm/DD 格式

javascript - 尝试删除 Node.js Express MongoDB Jade 应用程序中的条目

javascript - express js 4 - 如何在没有 app.configure 的情况下进行配置?

javascript - Webglclear() 问题

php - 如何正确完成此爆炸和比较查询?拉拉维尔 5.3

php - 检查并检索数据库列日期是否在接下来的 X 天内

javascript - 使用 getAttribute 从 javascript 中的 [object SVGCircleElement] 检索值