【发布时间】:2020-02-16 07:32:26
【问题描述】:
我正在尝试运行 mongoose find 命令,如果它与数组中的少数数据集匹配,则需要更新数据库。 这是我写的查询。
membersId=["U-ZCIwZGvW", "U-MbyAVxXf", "U-Gbe9RhGu"];
let updateUserData=(groupData)=>{
return new Promise((resolve,reject)=>{
for(M in membersId){
console.log(membersId[M]);
UserModel.findOne({userId:membersId[M]},(err,response)=>{
if(err){
console.log(err);
reject(err);
}else if(check.isEmpty(response)){
reject("Id not found");
}else{
if(!response.groups.includes(groupData._id)){
response.groups.push(groupData._id)
response.save((err,data)=>{
if(err){
console.log(err);
reject(err);
}else{
console.log(data);
}
})
}
}
})
}
resolve(groupData,'Members Added','AddMembersToGroup',00);
})
}
我读到了 async-await 并尝试了这个..
membersId=["U-ZCIwZGvW", "U-MbyAVxXf", "U-Gbe9RhGu"];
let updateUserData = (groupData) => {
return new Promise((resolve, reject) => {
async function getTodos() {
for (const M of membersId) {
await UserModel.findOne({ userId: M }, (err, response) => {
if (err) {
console.log(err);
reject(err);
} else if (check.isEmpty(response)) {
reject("Id not found");
} else {
if (!response.groups.includes(groupData._id)) {
response.groups.push(groupData._id)
response.save((err, data) => {
if (err) {
console.log(err);
reject(err);
} else {
console.log(data);
}
})
}
}
})
}
console.log('Finished!');
resolve(groupData,'Members Added','AddMembersToGroup',00);
}
getTodos();
})
}
async 方法正在工作,但它仍然不是完全同步的,而且如果出现任何错误,它也不会停止。
如何在出错时退出for循环并只执行一次resolve语句,以便它一旦运行就不会返回到其他代码。
即使有错误它也会运行。
【问题讨论】:
标签: javascript asynchronous mongoose promise async-await