Javascript 从回调函数返回值。

Javascript 从回调函数返回值。,javascript,node.js,Javascript,Node.js,我正在尝试实现一个安全例程来验证密码。函数easyPbkdf2工作正常,但我需要返回布尔值valid。请帮个小忙,我的望远镜有问题。 提前谢谢 userSchema.methods.verifyPassword = function(password) { easyPbkdf2 = new EasyPbkdf2(options); easyPbkdf2.verify(this.password_salt, this.password_hash, password, functio

我正在尝试实现一个安全例程来验证密码。函数easyPbkdf2工作正常,但我需要返回布尔值valid。请帮个小忙,我的望远镜有问题。 提前谢谢

userSchema.methods.verifyPassword = function(password) {
    easyPbkdf2 = new EasyPbkdf2(options);
    easyPbkdf2.verify(this.password_salt, this.password_hash, password, function(err, valid) {
        console.log(valid);
});
return valid; // This doesn't work...[ReferenceError: valid is not defined]
}

Valid在easypbkdf2函数内被赋值,但您返回的是函数外的值,因此它没有定义。您可能需要在函数中返回valid,在该函数中,您正在进行安慰,以查看valid。让我知道它是否适合您

EasyPbkdf2。verify()是异步的。返回的值无效。您需要传递一个回调函数来返回该值。大概是这样的:

userSchema.methods.verifyPassword = function(password, callback) {
    var easyPbkdf2 = new EasyPbkdf2(options);
    easyPbkdf2.verify(this.password_salt, this.password_hash, password, callback);
};


// how to call it
userSchema.methods.verifyPassword(password, function(err, valid) {
    if (err) {
        // do something such as throwing error
    }
    console.log(valid);
});

return valid
放在
console.log(valid)
之后。您的
return
超出了您的功能范围。是否尝试使用异步方法返回值?有一个范围问题。@DSoles79-你所要求的是不可能的。不能从异步方法返回值。必须使用回调。不能从同步函数调用返回异步获取的值。您必须使用回调来传递异步结果。我尝试了此操作,但第一个函数没有将值返回到verifyPassword方法。必须返回真/假值的函数是第一个。谢谢@Ben,这解决了我的问题。我只使用了一次回调。现在我看到需要两个回调。:-)