Javascript对象不返回变量

时间:2014-08-06 08:53:56

标签: javascript

我在快递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
    });
  }
}

1 个答案:

答案 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?