【发布时间】:2020-07-30 07:20:13
【问题描述】:
Parse.Cloud.beforeSave("Attendance", function (request, response) {
var Attendance = Parse.Object.extend("Attendance");
var query = new Parse.Query(Attendance);
query.equalTo('user', { "__type": "Pointer", "className": "_User", "objectId": request.object.get("user").id });
query.equalTo('meeting', { "__type": "Pointer", "className": "Meeting", "objectId": request.object.get("meeting").id });
query.first({ useMasterKey: true }).then(function (result) {
if (result == undefined) {
console.log("!!!!!!!!! attendance creation approved for user id " + request.object.get("user").id + " and meeting id " + request.object.get("meeting").id)
response.success();
} else {
response.error("Attendance creation prevented because same attendance with same owner and meeting already exists")
}
}, function (err) {
console.error(err);
response.error(err);
return;
});
});
我有一个包含两列的出勤类:用户指针和会议指针。 每个用户在一次会议中应该只有一个出席记录。 因此,在 beforeSave 云代码触发器中,我进行了查询以查看是否存在现有的出勤记录。我认为这可以防止重复的出勤记录。
但是当我们模拟大量并发请求时,例如在 for 循环中创建 50 条重复的出勤记录,我们仍然看到大量的记录,例如 33 条重复记录。
这感觉像是一种竞争条件。
我们如何才能真正防止这样的重复对象?
【问题讨论】:
标签: node.js parse-platform parse-cloud-code