只有 运行 只在实时数据库中写入一次值
Only run write value at realtime database only once
firebase.auth().onAuthStateChanged(function(user) {
if (user){
firebase.database().ref("users/" + user.uid).set({
email:user.email,
points:"500",
uid: user.uid
})
var query = firebase.database().ref("users").child(user.uid);
query.once("value").then(function(snapshot) {
var email = snapshot.val().Email;
var point = snapshot.val().points;
document.getElementById("points").innerHTML=point;
});
上面的代码用于写入和从数据库中检索数据,
但它没有按计划进行。每当有变化时
积分,它会自动恢复到500分。有没有办法让一个用户的数据只写一次?
听起来你只想在用户数据还不存在的情况下写入初始点。为此,您可以 use a transaction:
if (user){
const userRef = firebase.database().ref("users/" + user.uid);
userRef.transaction((current) => {
if (!current) return {
email:user.email,
points:"500",
uid: user.uid
}
})
...
此 returns 如果数据尚不存在,则为初始值。因为它 returns 否则没有价值,当数据已经存在时事务被中止。
firebase.auth().onAuthStateChanged(function(user) {
if (user){
firebase.database().ref("users/" + user.uid).set({
email:user.email,
points:"500",
uid: user.uid
})
var query = firebase.database().ref("users").child(user.uid);
query.once("value").then(function(snapshot) {
var email = snapshot.val().Email;
var point = snapshot.val().points;
document.getElementById("points").innerHTML=point;
});
上面的代码用于写入和从数据库中检索数据, 但它没有按计划进行。每当有变化时 积分,它会自动恢复到500分。有没有办法让一个用户的数据只写一次?
听起来你只想在用户数据还不存在的情况下写入初始点。为此,您可以 use a transaction:
if (user){
const userRef = firebase.database().ref("users/" + user.uid);
userRef.transaction((current) => {
if (!current) return {
email:user.email,
points:"500",
uid: user.uid
}
})
...
此 returns 如果数据尚不存在,则为初始值。因为它 returns 否则没有价值,当数据已经存在时事务被中止。