Javascript 如何检查用户名是否可用,如果可用,使用事务将其存储在CloudFireStore中以保持数据一致性?
现在我要检查用户名是否存在Javascript 如何检查用户名是否可用,如果可用,使用事务将其存储在CloudFireStore中以保持数据一致性?,javascript,firebase,google-cloud-firestore,transactions,Javascript,Firebase,Google Cloud Firestore,Transactions,现在我要检查用户名是否存在 await _firestore .collection('users') .where('username', isEqualTo: username) .limit(1) .get() .then((value) { if (value.docs.isEmpty) { available = true; } else { available = false;
await _firestore
.collection('users')
.where('username', isEqualTo: username)
.limit(1)
.get()
.then((value) {
if (value.docs.isEmpty) {
available = true;
} else {
available = false;
}
});
但是我不能在事务中使用异步函数
_firestore.runTransaction((transaction) {
return transaction.get("USER UID").then((_) {
if (USERNAME EXISTS) // this obviously doesnt work {
transaction.set(
docRef,
{'username': username},
);
}
});
});
在保持数据一致性的同时保存用户名等唯一值的最佳做法是什么?
基本上如何原子地实现这两个操作->检查用户名是否不存在并将其写入数据库(如果可用)要确保数据库中的用户名(或任何其他值是唯一的),必须将该值用作文档的键。否则,无法保证跨值,因为您不能保证所有客户端都将使用事务来写入数据。因此,为了确保用户名是唯一的,创建一个用户名的集合,例如,每个文档只包含声明该用户名的用户的UID。然后,您可以使用安全规则来确保两个集合同时更新。