我知道我们在这里有很多这样的问题,但是没有一个答案似乎适用于我的代码,请看一下:
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()函数中给出任何输出时,它都可以正常工作,但是当我返回它时,只是说它是"未定义"
答案 0 :(得分:1)
由于节点js的非阻塞,异步性质,它正在发生。 这意味着需要花费很长时间才能完成的任何活动,例如文件访问,网络通信和数据库操作,并放在一边,直到结果准备好并通过回调函数返回。
这就是为什么你得到了未定义的原因,因为当db操作正在讨价还价时,由于非阻塞性质,外部控制台会被执行。
要获得结果,您可以执行此操作
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)
});
})