You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:45:07