为什么我不能在 passport.js 本地策略回调中创建和执行函数?

Why can't I create and execute functions in my passport.js local strategy callback?

当我尝试调用 saveTheUsr() 时,它会导致错误 usr is not defined。我只是不明白,为什么它不可访问?我知道我可以简单地排除函数并在回调中包含函数内容,这样就可以了。我只想知道一种可以声明 usr 对象并通过回调中的函数调用它的方法。正是我在回调中尝试的方式。那可能吗?为什么我的方法不起作用?

var LocalStrategy   = require('passport-local').Strategy;
var User = require('../app/models/user');

function saveTheUsr(){
  var usr = new User();
  usr.local.email    = email;
  usr.local.password = password;
  usr.save(function(err) {
      if (err)
        throw err;
      return done(null, usr);
  });
}

passport.use('local-signup', new LocalStrategy({
        usernameField : 'username',
        passwordField : 'password',
        passReqToCallback : true
    },
    function(req, email, password, done) {

        User.findOne({ 'local.email' :  email }, function(err, user) {

            if (err)
                return done(err);

            if (user) {
                return done(null, false);
            } else {
                saveTheUsr();
            }

        });

    }));

正如评论中指出的那样。

问题在于 done 变量未在 saveTheUsr() 函数中定义。解决方法是让 saveTheUsr 接受一个名为 done 的额外参数,并为调用它的地方传递一个回调函数。