Javascript 未经处理的拒绝-承诺
我对未经处理的弹射一无所知。下面的方法应该抛出异常并终止流,但它没有。请支持以任何一种方式解决它 案例1: 将承诺中的值作为true和trusted条件。但它被绕过并返回未处理的拒绝,并抛出异常Javascript 未经处理的拒绝-承诺,javascript,promise,Javascript,Promise,我对未经处理的弹射一无所知。下面的方法应该抛出异常并终止流,但它没有。请支持以任何一种方式解决它 案例1: 将承诺中的值作为true和trusted条件。但它被绕过并返回未处理的拒绝,并抛出异常 Utils.isMaximumLimitReached(id).then(isLimit=>{ console.log(isLimit); //true if(isLimit){ throw "not allowed"; } }) 编辑: 案例3:这也会
Utils.isMaximumLimitReached(id).then(isLimit=>{
console.log(isLimit); //true
if(isLimit){
throw "not allowed";
}
})
编辑:
案例3:这也会返回未处理的拒绝,这是不允许的
const isMaximumLimitReached = coachingId => {
return db.coachingClassEntries
.findAndCountAll()
.then(counts => {
let numberOfEntries = 2;
//let maxEntries = counts.rows[0].coachingClass.maxEntries;
let maxEntries=2;
return new Promise((resolve,reject)=>{
if (numberOfEntries == maxEntries) {
reject('this is not allowed');
}
});
});
};
Utils.isMaximumLimitReached(data.coachingClassId).then().catch(error=>{
throw error;
})
承诺拒绝通常通过
then
方法中的第二个回调来处理,在您的案例1中可能是这样的:
Utils.isMaximumLimitReached(id).then(()=>{
// everything is fine
}, (error) => {
// promise was rejected, handle error
console.log(error);
})
这样,由
IsMaximumLimitReach
引起的任何拒绝都将在错误回调中处理。更改您的承诺。使用
Promise.reject(new Error('409',msg)).then(function() {
// not called
}, function(error) {
console.log(error); // Stacktrace
});
希望这有助于解决您的问题。如果你想抛出错误,那么在决定使用什么之前,请先确认。检查此项。您需要添加catch块来处理每个承诺。@RohanKadu即使使用catch块,它也会在您捕获并重新播放的最后一个示例中抛出未处理的拒绝。我猜调用的是
Utils.isMaximumLimitReach(data.coachingClassId).catch(()=>{…
没有捕获任何内容。@HMR抱歉。我现在更正了它。即使这样,也返回未处理的拒绝。您的第二个代码sinippet似乎在然后阶段没有返回被拒绝的承诺。案例3已按您的建议完成。我仍然未处理rejection@Gayathri未处理的拒绝具体在哪里?如果findAndCountAll
被拒绝,您也需要处理。在IsMaximumLimitReach内部,正好在拒绝行中,您可以检查案例3并告诉我出了什么问题吗?