Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在firebase中使用事务的正确方式是什么_Angular_Firebase_Firebase Realtime Database_Angularfire2_Angular7 - Fatal编程技术网

Angular 在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

在使用Firebase时,我通常使用AngularFire2。但这次我没有,我使用了普通的Firebase库,因为当我检查AngularFire2上的文档以了解我需要的事务的使用情况时,我没有找到它

使用普通的Firebase库时,我遇到了这个错误,它表示事务没有提交,但数据仍然保存到Firebase。 谁能指出我犯的错误吗

这是我的密码:

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() };