[英]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.