Firebase快照引用不会返回数据。

4

我正在使用Firebase,并且有一个人员列表,其中包含特定的优先级。在我的某个函数中,设置和获取优先级运作良好。但是在另一个函数中,我只能进行设置,尝试获取该项的优先级时返回“dataSnapshot.getPriority()不是一个函数”的错误。

var playersList = new Firebase('https://myfirebase.firebaseIO.com/players') 
var winnerSnapshot =  playersList.child(winner);
winnerSnapshot.setPriority('1300'); //This is working
var oldPriority = winnerSnapshot.getPriority(); //Not working
1个回答

2
这里实际上涉及到两种不同的对象。一个是Firebase引用,另一个是DataSnapshot。当你调用new Firebase()时,会得到一个Firebase引用,它允许你写入数据(例如使用set或setPriority),或者为读取数据(例如使用on或once)附加回调函数。
使用on()或once()注册的这些回调将通过DataSnapshot接收数据,你可以在其中调用.getPriority()。请参阅《读取数据》文档以获取完整信息。
例如,要使您的示例工作,您可以执行以下操作:
var winner = "somebody";
var playersListRef = new Firebase('https://myfirebase.firebaseIO.com/players') 
var winnerRef =  playersListRef.child(winner);

// You use a firebase reference to write data.
winnerRef.setPriority('1300');

// You can also use a firebase reference to attach a callback for reading data.
winnerRef.once('value', function(winnerSnapshot) {
  // Inside your callback, you get a DataSnapshot that gives you access to the data.
  var priority = winnerSnapshot.getPriority();
});

这很有道理,谢谢。但如果我像那样调用'once',它会在被调用时触发,还是只有在数据更改时才会触发? - user1827044
对于任何其他人,它在被调用时触发。 - user1827044
是的,.once() 检索数据并触发一次。如果您希望它在每次数据更改时也触发,请改用 .on()。 - Michael Lehenbauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接