如何在保持优先级的同时使用.transaction更新数据?

时间:2014-03-12 22:55:38

标签: transactions firebase

我没有找到任何关于如何使用' .transaction'更新Firebase中的值的文档。同时保持优先权,例如' .setWithPriority'确实。我有这个工作,但只是寻找一些关于使用Firebase API的最佳实践的反馈。以下是我正在使用的代码片段:

userScoreRef.once('value', function(snapshot) 
{
    if(snapshot.val() === null) {
        // Create a new participant.
        userScoreRef.setWithPriority({ Participant: participant, CurrentScore: 0 }, 0);             
    }
    else {
        // Update participant score.
        userScoreRef.child("CurrentScore").transaction(function(_currentScore) {
        _currentScore++;
        userScoreRef.setWithPriority({ Participant: participant, CurrentScore: _currentScore }, _currentScore);
        return;})// DO NOT UPDATE WITH TRANSACTION! Let setWithPriority perform the data update.
    }
})

你可以看到我: 1)从Firebase w / .transaction中提取当前值,2)使用.setWithPriority设置数据,最后3)简单地返回事务调用以取消它。

1 个答案:

答案 0 :(得分:1)

目前这有点尴尬,但以下内容应该有效:

userScoreRef.transaction(function(user) {
  if (user == null) {
    return {
      Participant: participant,
      CurrentScore: 0,
      '.priority': 0
    }
  } else {
    user.CurrentScore++;
    user['.priority'] = user.CurrentScore;
    return user;
  }
});

基本上,您可以将.priority添加到从事务返回的对象中以设置优先级。但遗憾的是,无法在事务更新功能中获得当前优先级。幸运的是,在您的情况下,您不需要它,因为它只是CurrentScore。