Javascript 未经处理的拒绝-承诺

Javascript 未经处理的拒绝-承诺,javascript,promise,Javascript,Promise,我对未经处理的弹射一无所知。下面的方法应该抛出异常并终止流,但它没有。请支持以任何一种方式解决它 案例1: 将承诺中的值作为true和trusted条件。但它被绕过并返回未处理的拒绝,并抛出异常 Utils.isMaximumLimitReached(id).then(isLimit=>{ console.log(isLimit); //true if(isLimit){ throw "not allowed"; } }) 编辑: 案例3:这也会

我对未经处理的弹射一无所知。下面的方法应该抛出异常并终止流,但它没有。请支持以任何一种方式解决它

案例1: 将承诺中的值作为true和trusted条件。但它被绕过并返回未处理的拒绝,并抛出异常

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并告诉我出了什么问题吗?