【发布时间】:2021-05-11 19:09:07
【问题描述】:
我尝试使用 await 使我的异步函数像同步任务一样工作,它适用于常规函数。但这不适用于我的匿名函数。
所以我的猫鼬模式中有这个功能:
userSchema.methods.comparePassword = function comparePassword(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, (err, isMatch) => {
cb(err, isMatch);
});
};
我尝试使用 bcrypt.compare 验证我的哈希密码,这需要我使用匿名函数来获取结果。
所以我尝试使用此功能比较密码:
async (email, password, h) => {
const user = await User.findOne({email: email, isDeleted: false})
if (!user) {
const data = ResponseMessage.error(400, User Not Found')
return h.response(data).code(400)
}
await user.comparePassword(password, (err, isMatch) => {
if (isMatch) {
console.log('TRUE')
return h.response('TRUE')
} else if (!isMatch) {
console.log('FALSE')
return h.response('FALSE')
}
})
console.log('END OF FUNCTION')
return h.response('DEFAULT')
}
附件:
我尝试运行服务器并比较密码,但它给了我 DEFAULT 的结果。我尝试使用控制台进行调试,然后它显示 TRUE/FALSE 在 END OF FUNCTION 之后显示。所以它证明我的函数运行良好,但我的 await 函数没有等待我的任务运行另一行。
对我的这个有什么帮助吗?
【问题讨论】:
-
它被称为
callback-style函数,它不是Promise,所以你不能在这里使用await。如果要使用async/await,则需要将callback-style函数转换为Promise。 -
您可以添加带有预览的图片,而不是作为链接
-
@srknzl stackoverflow 不允许我,因为我是新用户