虽然满足条件,但以下代码不会处理错误。请帮助理解原因
编辑:以下代码现在在满足条件的情况下终止代码流,但在未处理的拒绝中抛出错误结果。
utils.js
const isMaximum = Id => {
return db.Entries
.findAndCountAll()
.then(counts => {
let numberOfEntries = 2;
let maxEntries = 2;
if (numberOfEntries == maxEntries) {
return true;
}
else{
return false;
}
});
};
xyz.js
const doSomething=(req,res,next)=>{
Utils.isMaximum(id).then(isLimit=> {
if(isLimit) throw new Error("not allowed"); //unhandled rejection
//rest of code gets terminated as expected
});
}
相关问题Why can I not throw inside a Promise.catch handler?无法找到解决方案。所以请说清楚。
答案 0 :(得分:2)
在.catch()
处理程序内部抛出会使承诺链成为被拒绝的承诺。如果您没有后续的.catch()
处理程序,那么它将被报告为未处理的promise rejction,因为之后没有.catch()
来捕获被拒绝的promise。这几乎总是一个编程错误,这就是你收到警告的原因。
在.catch()
内投掷并不会终止您的计划。这个例外由承诺基础设施捕获(并变成被拒绝的承诺)。这就是承诺的工作方式(按规范)。如果您希望程序在此时终止,那么您可以调用process.exit()
而不是抛出。
现在你已经编辑了你的问题,现在你正试图进入.then()
处理程序。好。我会解决你添加的内容。下次请从整个代码上下文开始,以便我们更快地了解情况。
Utils.isMaximum()
是异步的。它返回一个承诺。您需要使用异步技术进行编程。你不能想像同步顺序代码。调用Utils.isMaximum()
后出现的任何代码都将在调用.then()
处理程序之前执行。
这是一个简单的例子:
Utils.isMaximum(id).then(isLimit => {
console.log("A");
});
console.log("B");
那将输出:
B
A
因此,对于初学者来说,你不能阻止.then()
块之后的代码运行.then()
块内的任何内容,因为函数的其余部分在{{{{}}之前执行1}}处理程序。
因此,您处理的常用方法是将其余代码放在.then()
处理程序中或在您从中调用的函数中:
.then()
答案 1 :(得分:0)
我没有抓到我抛出的错误,这是唯一的原因。以下解决了。
np.warnings.filterwarnings('ignore')