Angular 在firebase中使用事务的正确方式是什么
在使用Firebase时,我通常使用AngularFire2。但这次我没有,我使用了普通的Firebase库,因为当我检查AngularFire2上的文档以了解我需要的事务的使用情况时,我没有找到它 使用普通的Firebase库时,我遇到了这个错误,它表示事务没有提交,但数据仍然保存到Firebase。 谁能指出我犯的错误吗 这是我的密码:Angular 在firebase中使用事务的正确方式是什么,angular,firebase,firebase-realtime-database,angularfire2,angular7,Angular,Firebase,Firebase Realtime Database,Angularfire2,Angular7,在使用Firebase时,我通常使用AngularFire2。但这次我没有,我使用了普通的Firebase库,因为当我检查AngularFire2上的文档以了解我需要的事务的使用情况时,我没有找到它 使用普通的Firebase库时,我遇到了这个错误,它表示事务没有提交,但数据仍然保存到Firebase。 谁能指出我犯的错误吗 这是我的密码: saveSeats(键、数字){ for(设i=0;i
saveSeats(键、数字){
for(设i=0;i
您不应在事务中使用set()
方法,如以下所示:
注意:使用set()修改数据将取消任何挂起的事务
在该位置,如果混合set()和
transaction()更新相同的数据
您应该“传递transaction()
一个更新函数,该函数用于将当前值转换为新值。”
因此,以下各项应正常工作:
busesRef.transaction(function(currentValue) {
if (currentValue === null) {
let newRow = JSON.stringify({ number: num, status: "reserved", timestamp: Date.now() });
return newRow; // <- Here the function returns the new value
} else {
console.log('Value Already Exists');
return; // Will abort the transaction.
}
},
....
或者,当然,简单地说
return { number: num, status: "reserved", timestamp: Date.now() };
进一步考虑:
我注意到您将事务包装在
for
循环中,这意味着您将修改不同buseref
节点的值。您不应该在一个事务中完成所有这些修改吗?而不是使用一组“原子”事务,每个事务都修改给定busesRef
节点的值?这取决于您的具体用例。这对我来说很清楚。非常感谢。
return { number: num, status: "reserved", timestamp: Date.now() };