我得到了例外:
(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请求我正在捕获。
答案 0 :(得分:2)
您没有从第一个Promise.reject
返回.then
。
答案 1 :(得分:0)
要继续向下'then'链,将在返回的值上调用'promise.resolve()'。
由于你的第一个函数没有返回'promise.reject()','promise.resolve()'被视为返回值并且链继续进行而没有捕获错误。