Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于承诺结果的抛出错误_Javascript_Asynchronous_Promise - Fatal编程技术网

Javascript 基于承诺结果的抛出错误

Javascript 基于承诺结果的抛出错误,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

虽然条件满足,但下面的代码不处理错误。请帮助理解原因

编辑:下面的代码现在在满足条件的情况下终止代码流,但抛出错误会导致未处理的拒绝

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
 });
}

相关问题找不到解决方案。因此,请澄清。

.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