进行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推送到不随事务变化的变量。
答案 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;
});
});