我没有找到任何关于如何使用' .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)简单地返回事务调用以取消它。
答案 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。