同步功能包装异步操作

时间:2017-09-20 00:43:10

标签: javascript node.js concurrency callback promise

假设我们有以下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函数运行成本很高,因此如何在不阻塞代码执行的情况下及时获得比较结果?

0 个答案:

没有答案