我要检查数据库中是否存在数据。如果假设数据存在,则将k的值设置为1
global.k = 0
va roll = {roll0:"1616",roll1:"234"}
for (let i = 0; i < inputcount; i++) {
var obj1 = roll["roll" + i];
const find = async() => {
const item = await RegisterUser.find({ eventname: event_name, rollno: obj1 })
if (item.length != 0) {
global.k = 1
console.log(global.k)
} else {
global.k = -1
console.log(global.k)
}
}
find()
}
console.log(global.k)
if(global.k==0){
// code for save
}
如果执行了循环,则该值不会打印为1
或-1
。实际上,我认为问题出在异步。请帮助我
答案 0 :(得分:1)
您致电find
,但不等待其结果。最好使async
的功能可以包裹整个循环:
const find = async() => {
global.k = 0
for (let i = 0; i < inputcount; i++) {
var obj1 = roll["roll" + i];
const item = await RegisterUser.find({ eventname: event_name, rollno: obj1 })
if (item.length != 0) {
global.k = 1
console.log(global.k)
} else {
global.k = -1
console.log(global.k)
}
}
console.log(global.k);
if (global.k == 0) {
// save...
}
}
find() // Don't put any code below this line. Put it at the end of the function above
NB:算法本身看起来很奇怪,因为对global.k
的每次分配都会覆盖之前分配的值。变量k
的名称也无助于了解其用途。
如果在 all 查询返回匹配项时需要将其设置为1,请在此处添加break
:
} else {
global.k = -1
console.log(global.k)
break;
}
如果在至少一个查询返回匹配项时需要将其设置为1,则在此处添加break
:
if (item.length != 0) {
global.k = 1
console.log(global.k)
break;
}
此外,if (global.k == 0)
结尾的检查很奇怪,因为这等效于进行if (inputcount == 0)
。因此,请务必检查您的逻辑。