我正在使用带有mongoose的node.js。我面临的问题是我正在打印newModifier1
,但在该函数之外,该值为空。
这是我的代码:
// Find userSchema
newModifier1 = "";
exports.findModifier = function(modifierName){
modifierModel.find({'name' : modifierName},function(err,result){
if(err){
console.log("Error : "+err);
throw err;
}
else{
newModifier1 = result;
// console.log("Modifier is searched successfully : "+newModifier1);
}
console.log("Modifier is searched successfully1 : "+newModifier1);
});
// newModifier1=temp;
return newModifier1; // it takes newModifier1 = "" value here
}
任何想法可能是什么问题?
答案 0 :(得分:1)
这就是发生的事情:
// this is "global" an would be weirdly overwritten
// if function is called multiple times before finishing
newModifier1 = "";
exports.findModifier = function(modifierName){
// TIMESTAMP: 0
modifierModel.find({'name' : modifierName},function(err,result){
// TIMESTAMP: 2
if(err){
console.log("Error : "+err);
throw err;
}
else{
newModifier1 = result;
// console.log("Modifier is searched successfully : "+newModifier1);
}
console.log("Modifier is searched successfully1 : "+newModifier1);
});
// TIMESTAMP: 1
return newModifier1; // it takes newModifier1 = "" value here
}
当发生了什么时,我添加了一些注意事项。正如您所看到的,并且由于node.js的异步特性,您在从数据库返回结果之前返回该值。
您需要熟悉异步流和回调函数。
将回调函数传递给findModifier
并等待数据库返回结果。
答案 1 :(得分:0)
modifierModel.find
以异步方式运行,并且在执行find方法的回调之前可能会返回findModifier
方法。虽然你看到它被打印出来但从方法返回的是无论如何都是空字符串。您可以使用async等库。