未处理的拒绝 - 承诺

时间:2018-02-16 10:56:20

标签: javascript promise

我是UnhandledRejection的新手。下面的方法应该抛出异常并终止流程,但它没有。请支持以任何方式解决它

案例1: 从承诺中获取价值作为真实和尝试的条件。但它被绕过并返回未处理的拒绝,抛出异常。

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

2 个答案:

答案 0 :(得分:1)

承诺拒绝通常在then方法中进行第二次回调处理,在您的情况1中可能看起来像这样:

Utils.isMaximumLimitReached(id).then(()=>{
  // everything is fine
}, (error) => {
  // promise was rejected, handle error
  console.log(error);
})

这样,isMaximumLimitReached引起的任何拒绝都将在错误回调中处理。

答案 1 :(得分:1)

使用

更改Promise.reject
Promise.reject(new Error('409',msg)).then(function() {
  // not called
}, function(error) {
  console.log(error); // Stacktrace
});

希望这有助于解决您的问题。如果你想在决定使用什么之前抛出错误然后你check this