使用PushID进行Firebase交易

时间:2018-09-28 01:55:43

标签: javascript firebase firebase-realtime-database

进行Firebase交易时,我对以下行为感到困惑。任何帮助将不胜感激。

问题: 我可以使用以下命令创建事务,但是,如果我尝试将pushID从“ pid”变量传递给事务引用,则它将中断。有人可以解释为什么这行不通吗,什么是正确的实现方式?

upvote() {
const data = {};
var pid = firebase.database().ref('infos/').push();
var postId = pid.key;
console.log(postId);

firebase.database().ref('infos/' + postId +'/vote').transaction(function(value) {
  if (value) {
    value++;
  }
 return value;
});

}

现在,如果我只是将pushID硬编码到“ postId”变量中,它将起作用:

var postId = '-LNDP-7eKMxxUHqeRNWN';

此外,在第一个块中,控制台会记录正确的pushID,但不会创建事务。

我想念什么?

谢谢..

编辑:我认为使用push()实际上会尝试将新的id推送到不随事务变化的变量。

1 个答案:

答案 0 :(得分:1)

考虑到您的代码在使用预定的推送ID时可以正常工作,我假设问题是由于在返回推送ID之前调用了事务导致的。

尝试以下操作:

firebase.database().ref('infos/').push().then(pushed => {

firebase.database().ref('infos/' + pushed.key +'/vote').transaction(function(value) {
if (value) {
value++;
}
return value;
});

});