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

bcrypt模块登录场景下异步调用await无效果问题求助

问题原因及解决办法

问题根源

你调用的bcrypt.compare用了回调函数写法,这个版本的方法不会返回Promise对象。而await只能作用于Promise,所以IDE提示"await has no effect",而且代码逻辑也不会按预期等待比对完成——回调会在比对结束后异步执行,但外层的await根本没有在等待它。

两种解决方式

方式一:改用Promise+async/await(推荐)

直接去掉回调函数,用await接收bcrypt.compare返回的Promise结果,错误会被try/catch捕获:

try {
  const isMatch = await bcrypt.compare(password, user.password);
  if (isMatch) {
    res.send('done');
  } else {
    res.send('nope');
  }
} catch (err) {
  console.log(err);
  res.status(500).send('服务器错误');
}

这和你注册时用的bcrypt.hash逻辑一致,都是Promise版本,await能正常生效。

方式二:保留回调但去掉await

如果坚持用回调写法,就不要加await,直接在回调里处理结果和错误:

bcrypt.compare(password, user.password, (err, result) => {
  if (err) {
    console.log(err);
    return res.status(500).send('服务器错误');
  }
  res.send(result ? 'done' : 'nope');
});

这种写法不需要try/catch,错误直接在回调的err参数里处理。

内容的提问来源于stack exchange,提问作者user20957580

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:21:03