2017-01-30 92 views
0

我有一段代码需要检查用户注册是否来自管理页面。如果是,它会将用户角色admin更改为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');应该运行如果条件是 –

回答

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处理函数后面的“res(true)”。

希望这会有帮助