2016-09-14 53 views
0

我知道我們有很多在這裏這樣的問題,但沒有一個答案似乎對我的代碼工作,一起來看看:貓鼬findOne函數返回取消定義

establishment = mongoose.model('Establishment' , new Schema({ 
    //_id : Schema.Types.ObjectId, 
    name : String, 
    cnpj : String, 
    description : String, 
    address : String, 
    products : [], 
    isActive : {type: Boolean, default: true} 
})); 




app.get('/home',(req, res)=>{ 
    var a = establishment.findOne({_id : "57d83a867d3ba20fcb657dc7" } , (err, estab)=>{ 
     if(err){ 
      return err; 
     } 
     console.log("inside the function: "+estab.name); 
     return estab 
    }); 
    console.log("outside the function: "+a.name) 
}) 

當內給出任何輸出findOne()函數,這一切都工作得很好,但是當我返回它時,只是說它是「未定義」

回答

1

這是由於節點js的非阻塞異步性質。 這意味着需要花費很長時間才能完成的任何活動(例如文件訪問,網絡通信和數據庫操作),並將其放在一邊,直到結果準備好並通過回調函數返回。

這就是爲什麼你得到未定義的原因,因爲雖然數據庫操作正在happing外部控制檯由於非阻塞性質得到執行。

爲了讓你能做到這一點

app.get('/home',(req, res)=>{ 
    establishment.findOne({_id : "57d83a867d3ba20fcb657dc7" } , (err, estab)=>{ 
     if(err){ 
      return res.send(err); 
     } 
     console.log("inside the function: "+estab.name); 
     // what ever proccing you need to do with result do here and finally return res 
     res.json(estab) 
    }); 
}) 
結果