我创建了一个与Firestore数据库通信的函数。 首先,检查关系中是否包含某些内容。如果没有,则添加一些内容。 如果已经存在,则使用数据,然后删除查询的关系中的条目。但是您必须在函数中添加它(其他部分)。现在的问题是,当两个用户同时执行功能时会发生什么。 当第一个用户完成请求时,是否可以将第二个用户放入队列?
let ref = db.collection('relation1')。doc('test')。collection('user');
var checkForAdd = ref.get()。then(快照=> {
if(snapshot.size <1){
db.collection('relation1')。doc('test')。collection('user')。add({
用户:“测试”,
createdAt:Date.now()
})。catch(err => {
console.log(err)
})
}
答案 0 :(得分:3)
Cloud Firestore支持用于读取和写入数据的原子操作。在一组原子操作中,要么所有操作都成功,要么不应用任何操作。
https://firebase.google.com/docs/firestore/manage-data/transactions
// Create a reference to the user doc you want to create if it doesn't exist.
const userCollectionRef = db.collection('relation1').doc('test').collection('user');
const userDocRef = userCollectionRef.doc('documentID');
return db.runTransaction(transaction => {
// This code may get re-run multiple times if there are conflicts.
return transaction.get(userDocRef).then(userDoc => {
if (userDoc.exists) {
// If something already exists then use the data and
// then delete the entry in the queried relation.
} else {
transaction.update(userDocRef, {
user: 'Test',
createdAt: Date.now()
});
}
});
}).then(() => {
console.log("Transaction successfully committed!");
}).catch(error => {
console.log("Transaction failed: ", error);
});