即使user.length大于零,重复变量也始终为false。控制台首先打印“ false”,然后打印重复记录。
var duplicate = false;
userModel.find({mobileNumber: 123456789},(err, user)=>{
if(user.length > 0){
console.log("Duplicate Record");
duplicate = true;
}
});
console.log(duplicate);
答案 0 :(得分:1)
Node JS本质上是异步的,因此它将打印
console.log(duplicate);
首先运行find函数
查看日志
var duplicate = false;
userModel.find({mobileNumber: 123456789},(err, user)=>{
console.log('find function called');
if(user.length > 0){
console.log("Duplicate Record");
duplicate = true;
console.log('duplicate inside',duplicate);
}
});
console.log('duplicate outside',duplicate);
答案 1 :(得分:0)
将重复项读取为false的原因是console.log的执行是在返回MongoDB查询(运行回调以更改重复项)之前完成的。
要解决这种竞争状况,Mongoose可以为查询返回Promise,您可以将async / await用于期望的同步行为。
async () => {
var duplicate = false;
let users = await userModel.find({mobileNumber: 123456789}).exec();
if (users.length > 0) {
console.log("Duplicate record");
duplicate = true;
}
console.log(duplicate); // true
// more code
}