2017-01-30 3 views
0

У меня есть часть кода, которая должна проверить, зарегистрирована ли регистрация пользователя с страницы администрирования. Если это произойдет, это изменит администратор роли пользователя на true, а затем продолжит код ниже него, и если он не будет отправлен с админ-страницы, тогда код внутри оператора if не будет работать, а код ниже будет запущен.Как выполнить инструкцию IF, а затем продолжить с другим кодом

if (userData.admin === true) { 
    users.findOneAndUpdate({ username: userData.username }, { $set: { admin: true } }, { new: true }) 
      .exec(function (err) { 
      if (err) throw err; 
      }); 
} 

console.log('This should execute'); 

Я использую этот подход, но когда пользователь регистрируется на странице администратора, консольный журнал не работает. Как я могу это сделать?

+1

Возможно, это бросает 'err'. – byxor

+5

Что бы вы ни делали в консоли console.log ('This should execute'); должен выполняться, потому что findOneAndUpdate является асинхронным, а console.log ('This should execute'); должно выполняться, что когда-либо условие if –

ответ

0

Мне кажется, что вам не хватает обратного вызова на этом асинхронном «findOneAndUpdate». Поскольку вы обрабатываете только «err», а не ответ от «findOneAndUpdate», код не выйдет из начального оператора if. и поэтому console.log не будет запущен, потому что браузер ждет обратного вызова. просто добавьте обратный вызов к «findOneAndUpdate» и поместите его после инструкции «err» if, и console.log должен работать.

if (userData.admin === true) { 
    users.findOneAndUpdate({ username: userData.username }, { $set: { admin: true } }, { new: true }, callback(err, res)) 
      if (err){ throw err;}; 
      res(true); 
} 

console.log('This should execute'); 

Примечание обратного вызова в функции «findOneAndUpdate», и «разрешением (истинные)» после обработчика ERR.

Надеюсь, что это поможет

Смежные вопросы