Предположим, что два пользователя на разных устройствах одновременно выполняют следующую операцию.
пользователь один:
db.collection('agents').where('phone','==','9876543210')
.get()
.then(function(querySnapshot) {
let agents = [];
querySnapshot.forEach(function(doc) {
agents.push(doc.data());
});
if(agents.length > 0){
agentExists();
}
else{
db.collection('agents').add({
firstName: "ABC",
lastName: "XYZ",
phone: "9876543210"
})
.then(function(){
agentAdded();
});
}
})
.catch(function(err){
console.log(err);
});
пользователь два:
db.collection('agents').where('phone','==','9876543210')
.get()
.then(function(querySnapshot) {
let agents = [];
querySnapshot.forEach(function(doc) {
agents.push(doc.data());
});
if(agents.length > 0){
agentExists();
}
else{
db.collection('agents').add({
firstName: "MNO",
lastName: "PQR",
phone: "9876543210"
})
.then(function(){
agentAdded();
});
}
})
.catch(function(err){
console.log(err);
});
где пользователи пытаются добавить информацию об агенте с разными firstName и lastName, но с одним и тем же номером телефона, а код написан таким образом, что первый запрос ищет номер, если он существует, агент не добавляется в коллекцию, если он этого не делает тогда это добавлено. Но когда оба пользователя выполняют вышеуказанные операции одновременно, оба агента добавляются, тогда как мое требование - разрешить добавление только одного агента, поскольку номер телефона будет дублирован.
Попробовали другие решения: Пробовал использовать метод onSnapshot () , чтобы получать обновления в реальном времени, но, как мы знаем, firestore sdk сначала добавляет документ в кэш, а затем в бэкэнд, поэтому, когда добавляется новый агент, сначала он показывает выход агента, а затем показывает агент добавлен.