Firebase事务

Firebase事务,firebase,angularfire,Firebase,Angularfire,我的问题是: 用户可以创建一个新组,该组将具有增量ID 我想要一个增量ID而不是推送ID,因为我希望该ID可以在e.x之后使用。用户可以通过输入组id来搜索组。所以我使用transaction来进行搜索。我写了一些代码,效果很好,谢谢 当我自己测试时,我不确定碰撞发生时是否正确。请看一看 var setGroupNumber = function() { //increment the number by 1 return $firebase(groupRef.chi

我的问题是:

用户可以创建一个新组,该组将具有增量ID

我想要一个增量ID而不是推送ID,因为我希望该ID可以在e.x之后使用。用户可以通过输入组id来搜索组。所以我使用transaction来进行搜索。我写了一些代码,效果很好,谢谢

当我自己测试时,我不确定碰撞发生时是否正确。请看一看

 var setGroupNumber = function() {
      //increment the number by 1 
      return $firebase(groupRef.child('info').child('groupNumber'))
        .$transaction(function(number) {
          if (!number) return 1;
          if (number < 0) return;
          return number + 1
        });
    }
var create = function(user_id, photoStr, name) {
  setGroupNumber().then(function(snapshot) {
    if (!snapshot) {
      console.log('transcation is aborted');
    }
    var group_id = snapshot.val() + 1000;

    $firebase(groupRef.child('group').child(group_id))
      .$set({
        photoURL: photoStr,
        group_id: group_id,
        user_id: user_id,
        name: name,
        members: {},
        created_time: Firebase.ServerValue.TIMESTAMP,
      })
      .then(function() {
        $firebase(groupRef.child('group').child(group_id).child('members').child(user_id)).$set(true);
      })
  })
}
它现在为我做了工作,但我有两个问题

这是正确的方法吗。组id不会重复吗

在我的代码中,我在setGroupNumbers之后做了很多事情,比如更新用户的数据库等等。这里没有显示,这是否意味着其他想要创建组的用户将等待所有这些操作完成


感谢您的时间:

让事务从1000开始返回值,而不是1,并在另一种方法中跳过向组id添加1000,这似乎更简单。交易是完成这项工作的正确方式。对于StackOverflow格式,这里有太多的非特定问题。一次只选一个问题来解决。请记住,这是问答,不是讨论形式。@加藤谢谢加藤,你解决了我想问的主要问题,我只在交易部分编辑了我的问题。因此,它可能对遇到交易问题的任何人都有用: