Angular项目用bcrypt更新用户信息时出现Unhandled promise rejection错误如何解决
报错修复方案
UnhandledPromiseRejectionWarning:未处理的Promise拒绝。该错误要么是在无catch块的async函数内部抛出异常导致,要么是被reject的Promise未通过.catch()处理导致。若要在出现未处理的Promise拒绝时终止node进程,可使用CLI flag
--unhandled-rejections=strict。(rejection id: 1)
该报错是调用bcrypt相关异步方法时,返回的Promise被reject后没有配套异常捕获逻辑导致,可按以下步骤排查修复:
- 补全异步操作的异常捕获
bcrypt的hash、compare等核心方法均返回Promise对象,无论使用async/await语法还是.then链式调用,都必须加异常捕获:
// 错误的async/await写法(无捕获) async function updateUserInfo(newPwd) { const hashedPwd = await bcrypt.hash(newPwd, 10) // 后续更新邮箱、密码的逻辑 } // 正确的async/await写法(加try/catch) async function updateUserInfo(newPwd) { try { const hashedPwd = await bcrypt.hash(newPwd, 10) // 后续更新邮箱、密码的逻辑 } catch (err) { // 此处处理异常,比如打印错误日志、返回前端错误提示 console.error('用户信息更新失败:', err) } }
// 错误的链式调用写法(无捕获) bcrypt.hash(newPwd, 10) .then(hashedPwd => { // 后续更新逻辑 }) // 正确的链式调用写法(补.catch) bcrypt.hash(newPwd, 10) .then(hashedPwd => { // 后续更新逻辑 }) .catch(err => { console.error('用户信息更新失败:', err) })
- 排查bcrypt报错的具体原因
常见触发Promise reject的场景如下:- 传入bcrypt的明文密码为undefined、null或非字符串格式
- 加密用的盐值参数非法,比如不是正整数或超出合理取值范围
- 项目中bcrypt依赖安装不完整,存在编译类运行报错
- 关联的数据库更新操作本身抛出异常未被捕获
- 快速定位问题代码的调试方法
启动Node服务时添加--unhandled-rejections=strict参数,进程会在出现未处理Promise拒绝时直接退出并输出完整错误栈,可直接定位到具体抛出异常的代码行。
内容的提问来源于stack exchange,提问作者xs915
相关产品推荐
相关产品推荐

