var bcrypt = require('bcryptjs');
var password = "Bacon";
var securePassword;
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(bacon, salt, function(err, hash) {
securePassword = hash
});
});
console.log(securePassword)
这可能会因Async而返回 undefined 。如何将哈希值存储在变量securePassword?
中答案 0 :(得分:1)
您正在securePassword
回调函数中将哈希值存储到bcrypt.hash
这是正确的..但是因为这是一个回调函数,您的console.log将在securePassword
之前执行分配..
解决方法是在回调句柄中执行逻辑。
您还可以使用承诺之类的不同方法来解决它,您可以从MDN
中阅读更多内容
var bcrypt = require('bcryptjs');
var password = "Bacon";
var securePassword;
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(bacon, salt, function(err, hash) {
securePassword = hash
dologic()
//console.log(securePassword)
//or have a function with this statement
});
});
function dologic(){
console.log(securePassword)
}

答案 1 :(得分:0)
您正在处理asynchronous
功能。
不可强>
var securePassword;
bcrypt.genSalt(10, function(err, salt) {
if (err) return callback(err);
bcrypt.hash(bacon, salt, function(err, hash) {
securePassword = hash;
console.log(securePassword);
});
});
不可强>
function generateSalt(callback) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(bacon, salt, callback);
});
}
generateSalt((err, hash) => {
if (err) // Handle error
console.log(hash);
});
答案 2 :(得分:-1)
您可以等到此变量为非null。例如,以这种方式:
var bcrypt = require('bcryptjs');
var password = "Bacon";
var securePassword = NULL;
var interval = NULL;
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(bacon, salt, function(err, hash) {
securePassword = hash
});
});
interval = setInterval(function() {
if(securePassword !== NULL) {
console.log(securePassword);
clearInterval(interval);
}
}, 1);