簡體   English   中英

Javascript:使用try-catch嵌套

[英]Javascript: Using try-catch nesting

我試圖首先創建一個條件語句,因為下面有三個條件,並且如果其中一個查詢未定義,則代碼會由於錯誤而停止。

const getEmptyCartQuery = await shopping_cart.findOne({
  (...)
});
const needsUpdatedQuantityQuery = await shopping_cart.findOne({
  (...)
});
const needsNewCartQuery = await shopping_cart.findOne({ 
  (...)
});

因此,我編寫了以下代碼,並使用try-catch語句進行了異常處理。

const data = await shopping_cart.findAll({
    where: { cart_id }
});

try {
    const getEmptyCart = await shopping_cart.findOne({ (...) });
    if (getEmptyCart) {
      await shopping_cart.update({ (...) });
    }
    ctx.body = data;
  } catch (e) {
    try {
      const needsUpdatedQuantity = await shopping_cart.findOne({ (...) });
      if (needsUpdatedQuantity) {
        await shopping_cart.update({ (...) });
      }
      ctx.body = data;
    } catch (e) {
      try {
        const needsNewCart = await shopping_cart.findOne({ (...) });
        if (needsNewCart) {
          await shopping_cart.create({ (...) });
        }
      } catch (e) {
        ctx.status = 400;
        ctx.body = e.message;
      }
    }
  }

它可以工作,但是我可以使用上述的嵌套try-catch語句嗎? 在db查找而不是try-catch期間,代碼還有其他方法可以無錯誤地流動嗎?

如果您還有其他需要補充的信息,請通過評論或回復讓我知道。

謝謝。

您可以使用Promise.all

Promise.all([shopping_cart.findOne({ ... }), shopping_cart.findOne({ ... }), shopping_cart.findOne({ ... })])
  .then(data => { /* Everything worked! */ })
  .catch(err => { /* There was an error */ });

使用@Jack Bashford的解決方案,如果您喜歡處理異步/等待寫入方式,則可以編寫如下相同的語句:

 try { const [result1, result2, result3] = await Promise.all([ shopping_cart.findOne({ ...}), shopping_cart.findOne({ ...}), shopping_cart.findOne({ ...}) ]); // use the results } catch (error) { // catch the error } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM