2017-01-30 108 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)」。

希望這會有幫助