Javascript 基于承诺结果的抛出错误
虽然条件满足,但下面的代码不处理错误。请帮助理解原因 编辑:下面的代码现在在满足条件的情况下终止代码流,但抛出错误会导致未处理的拒绝 utils.jsJavascript 基于承诺结果的抛出错误,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,虽然条件满足,但下面的代码不处理错误。请帮助理解原因 编辑:下面的代码现在在满足条件的情况下终止代码流,但抛出错误会导致未处理的拒绝 utils.js const isMaximum = Id => { return db.Entries .findAndCountAll() .then(counts => { let numberOfEntries = 2; let maxEntries = 2; if (numberOfEntrie
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
});
}
相关问题找不到解决方案。因此,请澄清。在
.catch()处理程序中抛出使承诺链成为被拒绝的承诺。如果没有后续的.catch()
处理程序,则会将其报告为未处理的承诺回复,因为之后没有.catch()
来捕获被拒绝的承诺。这几乎总是一个编程错误,这就是您得到警告的原因
在.catch()中抛出不会终止程序。该异常被promise基础架构捕获(并转化为被拒绝的promise)。这就是承诺的工作原理(按规范)。如果希望程序在该点终止,则可以调用process.exit()
,而不是抛出
现在您已经编辑了您的问题,现在您正试图在.then()
处理程序中插入。好啊我会处理你添加的内容。下次请从整个代码上下文开始,这样我们可以更快地了解情况
Utils.isMaximum()
是异步的。它回报了一个承诺。您需要使用异步技术进行编程。你不能像同步顺序代码那样思考。调用Utils.isMaximum()
之后出现的任何代码都将在调用处理程序之前执行
下面是一个简单的例子:
Utils.isMaximum(id).then(isLimit => {
console.log("A");
});
console.log("B");
这将产生:
B
A
因此,对于初学者来说,您不能通过在.then()
块中执行的任何操作来阻止.then()
块之后的代码运行,因为函数的其余部分在.then()
处理程序之前执行
因此,通常的处理方法是,必须将其余代码放入.then()
处理程序或从那里调用的函数中:
const doSomething=(req,res,next)=>{
Utils.isMaximum(id).then(isLimit=> {
if(!isLimit){
// rest of code here that sends regular response
} else {
// handle error here - send error response
// or OK to throw here, throw will be caught by next .catch()
}
}).catch(err => {
// send error response here
});
}
在.catch()
处理程序中抛出使承诺链成为被拒绝的承诺。如果没有后续的.catch()
处理程序,则会将其报告为未处理的承诺回复,因为之后没有.catch()
来捕获被拒绝的承诺。这几乎总是一个编程错误,这就是您得到警告的原因
在.catch()中抛出不会终止程序。该异常被promise基础架构捕获(并转化为被拒绝的promise)。这就是承诺的工作原理(按规范)。如果希望程序在该点终止,则可以调用process.exit()
,而不是抛出
现在您已经编辑了您的问题,现在您正试图在.then()
处理程序中插入。好啊我会处理你添加的内容。下次请从整个代码上下文开始,这样我们可以更快地了解情况
Utils.isMaximum()
是异步的。它回报了一个承诺。您需要使用异步技术进行编程。你不能像同步顺序代码那样思考。调用Utils.isMaximum()
之后出现的任何代码都将在调用处理程序之前执行
下面是一个简单的例子:
Utils.isMaximum(id).then(isLimit => {
console.log("A");
});
console.log("B");
这将产生:
B
A
因此,对于初学者来说,您不能通过在.then()
块中执行的任何操作来阻止.then()
块之后的代码运行,因为函数的其余部分在.then()
处理程序之前执行
因此,通常的处理方法是,必须将其余代码放入.then()
处理程序或从那里调用的函数中:
const doSomething=(req,res,next)=>{
Utils.isMaximum(id).then(isLimit=> {
if(!isLimit){
// rest of code here that sends regular response
} else {
// handle error here - send error response
// or OK to throw here, throw will be caught by next .catch()
}
}).catch(err => {
// send error response here
});
}
我没有抓住我抛出的错误,这是唯一的原因。下面解决
const doSomething=(req,res,next)=>{
Utils.isMaximum(id).then(isLimit=> {
if(isLimit) throw new Error("not allowed");
}).catch(next);
//rest of code gets terminated as expected
}
我没有抓住我抛出的错误,这是唯一的原因。下面解决
const doSomething=(req,res,next)=>{
Utils.isMaximum(id).then(isLimit=> {
if(isLimit) throw new Error("not allowed");
}).catch(next);
//rest of code gets terminated as expected
}
我需要在前端将该错误消息作为警报终止流。因此,我必须抛出错误消息。@Gayathri-什么是“终止流”的意思?您的问题中没有显示任何其他内容,因此我不知道这意味着什么。一般来说,有没有一种方法可以抛出从承诺中收到的错误消息?@Gayathri-“抛出错误消息”是什么意思?.then()
或.catch()
处理程序捕获任何异常并将其转换为被拒绝的承诺。它就是这样做的。该异常由promise基础架构捕获和处理。它不会终止你的程序。如果你想终止你的程序,请使用<代码>进程.ExtEnter()/Cuth.IsIsIsMax函数返回一个条件,比如a==B,返回拒绝(“不允许”)。该错误消息需要作为警报抛出。调用isMaximum的下一行方法不应该被执行,我需要在前端将错误消息作为警报终止流。因此,我必须抛出错误消息。@Gayathri-什么是“终止流”的意思?您的问题中没有显示任何其他内容,因此我不知道这意味着什么。一般来说,有没有一种方法可以抛出从承诺中收到的错误消息?@Gayathri-“抛出错误消息”是什么意思?.then()
或.catch()
处理程序捕获任何异常并将其转换为被拒绝的承诺。它就是这样做的。该异常由promise基础架构捕获和处理。它不会终止你的程序。如果你想终止你的程序,请使用<代码>进程.ExtEnter()/Cuth.IsIsIsMax函数返回一个条件,比如a==B,返回拒绝(“不允许”)。该错误消息需要作为警报抛出。调用isMaximum的方法的下一行不应该被执行,您可以显示“//其余的代码”吗?什么c