当我尝试多次更新用户字段时出现猫鼬错误。我想要实现的是在对外部资源进行 API 调用后根据某些条件更新该用户。根据我的观察,我在processUser()函数中同时达到了这两个条件,因此,user.save()几乎同时被调用,而 mongoose 不高兴向我抛出这个错误:
MongooseError [ParallelSaveError]: Can't save() the same doc multiple times in parallel. Document: 5ea1c634c5d4455d76fa4996
我知道有罪,我的代码是这里的罪魁祸首,因为我是新手。但是有什么方法可以在不遇到此错误的情况下达到我想要的结果?谢谢。
function getLikes(){
var users = [user1, user2, ...userN]
users.forEach((user) => {
processUser(user)
})
}
async function processUser(user){
var result = await makeAPICall(user.url)
// I want to update the user based on the returned value from this call
// I am updating the user using `mongoose save()`
if (result === someCondition) {
user.meta.likes += 1
user.markModified("meta.likes")
try {
await user.save()
return
} catch (error) {
console.log(error)
return
}
} else {
user.meta.likes -= 1
user.markModified("meta.likes")
try {
await user.save()
return
} catch (error) {
console.log(error)
return
}
}
}
setInterval(getLikes, 2000)