Особенности переменной в callback-функциях JavaScript

Рейтинг: 0Ответов: 1Опубликовано: 17.03.2015

Проблема такая:

app.get('/', function (req, res){
  var user = new User({
    username: "Tester2",
    password: "secret",
    login: "asd"
  });
  user.save(function(err, user, affected) {
    if (err) throw err;
    User.findOne({username: "Tester2"}, 'login', function (err, tester) {
      data = {user: tester.login};
    });
  });
  res.render('index', data);
});

Хотелось бы делать рендер страницы именно в этом месте, но в таком случае data получается неидентифицированным. Работает, только если рендер поместить непосредственно в функции поиска. Подскажите, пожалуйста, а то не так давно работаю с JavaScript, поэтому не могу понять все особенности языка. Использую Node.js и модуль mongoose и шаблонизатор ect.

Ответы

▲ 1Принят

Операция записи в базу данных - асинхронная, так что рендер нужно звать по факту её завершения. В простейшем случае так:

  user.save(function(err, user, affected) {
    if (err) throw err;
    User.findOne({...}, null, function (err, tester) {
         res.render('index', {user: tester.login});
    });
  });