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
相关产品推荐
相关产品推荐

