带有捕获的承诺链上的“未处理承诺拒绝”

时间:2017-08-02 19:08:26

标签: javascript promise

我得到了例外:

  

(node:1356)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):无法编辑已发票上的费用

我的代码使用promise链来更新一些数据。它首先使用getExpense获取数据库版本,然后检查用户是否允许编辑它(它不是issued)。如果已发出,则拒绝承诺,否则继续执行update,然后再次使用getExpense获取更新的数据,以便将其返回。

但是,当以“已发放”费用运行时,更新会通过并出现上述错误。预计拒绝收到“无法编辑已开具发票上的费用”的消息,但为什么不会被抓住?:

  expensesModels.getExpense(expense.id)
    .then(validatedExpense => {
      if (validatedExpense.issued) {
        Promise.reject('Cannot edit expense on issued invoice');
      } else {
        Promise.resolve();
      }
    })
    .then(() => expensesModels.update(expense))
    .then(() => expensesModels.getExpense(expense.id))
    .then(returnExpense => response.json(returnExpense))
    .catch(err => errorHandling.onError(err, response));

我知道这个错误是在没有catch终止promise链的情况下引起的,但是为了在最后一行拒绝HTTP请求我正在捕获。

2 个答案:

答案 0 :(得分:2)

您没有从第一个Promise.reject返回.then

答案 1 :(得分:0)

要继续向下'then'链,将在返回的值上调用'promise.resolve()'。

由于你的第一个函数没有返回'promise.reject()','promise.resolve()'被视为返回值并且链继续进行而没有捕获错误。