我在快递js中使用下面的功能,但是我无法返回pw.generate的值。谁知道为什么?我是JavaScript的新手。
// create new xkcdPassword object
var pw = new xkcdPassword();
// set options for password generator
var options = {
numWords: 1,
minLength: 5,
maxLength: 8
};
var password = pw.generate(options, function(error, result) {
if(error){
return error;
}
// below variable now contains a password like "puppy"
var newPassword = result.join(' ');
// This does not work, somehow I cannot return the variable
return newPassword;
});
// below returns an undefined value
console.log(password);
所以变量" newPassword"确实包含密码,在pw.generate中。我不能在pw.generate之外使用它。是因为需要返回密码的函数被用作参数吗?
编辑: 由于异步和同步方法的结合,@ scx给了我使用回调的解决方案。我现在使用承诺作为回调,效果很好,这是我更新的代码:
function updatePassword(user) {
var deferred = Q.defer();
// create new xkcdPassword object
var pw = new xkcdPassword();
// set options for password generator
var options = {
numWords: 1,
minLength: 5,
maxLength: 8
};
var password = pw.generate(options, function(error, result) {
if(error){
return error;
}
var newPassword = result.join(' ');
user
.updateAttributes({
password: newPassword
})
.success(function(){
deferred.resolve(newPassword);
})
.error(function() {
deferred.reject();
});
})
return deferred.promise;
}
module.exports = {
passwordReset: function(req, res, next) {
updatePassword(user)
.then(function(password){
next();
}, function(){
// error
});
}
}
答案 0 :(得分:0)
根据此example您错过了导入xkcd-password,请尝试在代码之前添加以下内容:
var xkcdPassword = require('xkcd-password');
var pw = new xkcdPassword();
顺便说一下你用npm正确安装了xkcd-password吗?如果上面没有帮助尝试使用像贝娄这样的npm安装。
npm install xkcd-password
更新: 请检查此答案,您将了解为何您无法访问该变量:How to return value from an asynchronous callback function?