即使拋出錯(cuò)誤,代碼仍將繼續(xù)

我是Node.js和Express.js的新手,希望得到一些指導(dǎo)。

我正在嘗試插入MySQL數(shù)據(jù)庫(kù),其中有名為delivery_orderdelivery_order_item的表。當(dāng)用戶提交交貨訂單信息(這進(jìn)入前一個(gè)表)時(shí),包括已交付的貨物(貨物將插入后一個(gè)表,其中外鍵為delivery_order_number),我想插入兩個(gè)表。但是,如果在插入到delivery_order表的過(guò)程中遇到錯(cuò)誤,貨物也不會(huì)插入到貨物表中,因此beginTransaction

例如,當(dāng)我嘗試插入delivery_order表的一個(gè)重復(fù)主鍵時(shí)(這顯然給了我一個(gè)錯(cuò)誤),代碼仍然會(huì)將貨物插入表中,并且不會(huì)中止整個(gè)過(guò)程。我確保在所有錯(cuò)誤范圍內(nèi)寫入throw err,但它不起作用。

如有任何建議,將不勝感激。

delivery_order.insert = (data) => {
  const tableData = data.tableData;
  const formInfo = data.formInfo;

  var datetime = new Date(formInfo.date);
  datetime = moment(datetime).format("YYYY-MM-DD");

  var duetime = new Date(formInfo.due);
  duetime = moment(duetime).format("YYYY-MM-DD");

  let formValues = {
    number: formInfo.number,
    name: formInfo.name,
    address: formInfo.address,
    date: datetime,
    due: duetime,
    city: formInfo.city,
    note: formInfo.note,
  };

  let itemValues = [];

  for (var i = 0; i < tableData.length; i++) {
    itemValues.push([
      formInfo.number,
      tableData[i].code,
      tableData[i].name,
      tableData[i].qty,
      tableData[i].unit,
    ]);
  }

  return new Promise((resolve, reject) => {
    pool.getConnection((err, connection) => {
      if (err) return reject(err);
      connection.beginTransaction((err) => {
        if (err) {
          connection.rollback(() => {
            connection.release();
            throw err;
          });
        }
        connection.query(
          "INSERT INTO delivery_order SET ?",
          formValues,
          (err, results) => {
            if (err) {
              connection.rollback(() => {
                connection.release();
                throw err; // Code still continues down there and doesn't abort even after getting an error here.
              });
            }
            connection.query(
              "INSERT INTO delivery_order_item (delivery_order_number, code, name, qty, unit) VALUES ?",
              [itemValues],
              (err, results) => {
                if (err) {
                  connection.rollback(() => {
                    connection.release();
                    throw err;
                  });
                }

                connection.commit(function (err) {
                  if (err) {
                    connection.rollback(() => {
                      connection.release();
                      throw err;
                    });
                  }

                  connection.release();
                  return resolve("ok");
                });
              }
            );
          }
        );
      });
    });
  });
};
? 最佳回答:

如果需要一種簡(jiǎn)單的方法來(lái)停止進(jìn)程,請(qǐng)中止進(jìn)程:

process.exit(1);

請(qǐng)簡(jiǎn)要說(shuō)明錯(cuò)誤沒(méi)有實(shí)際存在的原因:當(dāng)您拋出錯(cuò)誤時(shí),它會(huì)將錯(cuò)誤返回給正在執(zhí)行給定函數(shù)的任何對(duì)象。從這段代碼中,看起來(lái)您正在創(chuàng)建一個(gè)MySQL引擎執(zhí)行的方法,這將解釋為什么進(jìn)程沒(méi)有退出。MySQL處理錯(cuò)誤的方式可能與普通節(jié)點(diǎn)完全不同。

主站蜘蛛池模板: 视频在线一区二区| 国产中的精品一区的| 精彩视频一区二区三区| 一区二区三区视频在线| 精品无码综合一区| 精品综合一区二区三区| 国产精品揄拍一区二区久久| 国模私拍一区二区三区| 久久国产精品免费一区二区三区| 濑亚美莉在线视频一区| 在线观看一区二区精品视频| 国产精品香蕉一区二区三区 | 合区精品久久久中文字幕一区| 久久伊人精品一区二区三区| 无码日韩精品一区二区三区免费 | 亚洲欧美日韩国产精品一区 | 久久99精品免费一区二区| 国产伦精品一区二区| 免费高清在线影片一区| 国产微拍精品一区二区| 成人在线观看一区| 国产高清视频一区二区| 国产精品区一区二区三| 美女免费视频一区二区| 无码人妻精品一区二区蜜桃AV| 精品一区二区三区电影| а天堂中文最新一区二区三区| 亚洲一区二区三区乱码A| 国产精品污WWW一区二区三区| 中文字幕一区二区三区精华液 | 国产一区二区视频免费| 精品一区二区高清在线观看| 一区二区三区伦理高清| 亚洲AV无码第一区二区三区| 亚洲国产一区国产亚洲| 国产精品乱码一区二区三| 老湿机一区午夜精品免费福利| 国产一区二区三区高清视频| 午夜福利一区二区三区在线观看 | 亚洲AV福利天堂一区二区三| 国产福利91精品一区二区三区 |