我得到了例外:
(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 回答
您没有从第一个
.then
返回Promise.reject
.要继续向下“then”链,在返回的值上调用'promise.resolve()' .
因为你的第一个函数没有返回'promise.reject()',所以'promise.resolve()'被视为返回值并且链进展而没有捕获错误 .