我的问题:
用户可以创建一个新组,该组将具有增量ID。
我想要增量ID而不是推送ID,因为我希望ID可以在之后使用(例如,用户可以通过输入组ID来搜索组)。所以我使用事务来执行此操作。我写了一些代码并且它运行良好(感谢stackoverflow!)
当我自己测试但我不确定碰撞发生时是否正确。请看看。
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不会重复)?
在我的代码中,我在setGroupNumber之后做了很多事情(比如更新用户的数据库等,这里没有显示),这是否意味着想要创建组的其他用户将会等到所有这些都完成了?
感谢您的时间:)