假设我们有以下if语句
.
.
if (!user.comparePassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
.
.
其中comparePassword(password)
是一个检查用户输入密码是否与数据库中的密码相同的函数..,并且它在另一个模块中定义如下:
userSchema.methods.comparePassword = function (password) {
let match = false;
bcrypt.compare(password, this.password)
.then(function (isMatch) {
if(isMatch){
match = true;
}
})
.catch(function (err) {
// handle error
});
return match;
};
问题在于I / O ..,人们可以很容易地看到if
语句依赖于函数comparePassword(password)
,它可以在其bcrypt.compare()
中的promise完成执行之前完成执行..,这意味着我大部分时间都match
false
,即使它在技术上应该是true
。 bcrypt的compare函数运行成本很高,因此如何在不阻塞代码执行的情况下及时获得比较结果?