首页 文章

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

提问于
浏览
-1

我得到了例外:

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

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

但是,当以“已发布”的费用运行时,更新将通过并出现上述错误 . 预计会拒绝“无法编辑已发票上的费用”,但为什么不会被 grab ?:

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 回答

  • 2

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

  • 0

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

    因为你的第一个函数没有返回'promise.reject()',所以'promise.resolve()'被视为返回值并且链进展而没有捕获错误 .

相关问题