我有一个带有firebase的实时数据库,我使用以下代码连接到数据库并从中获取一些数据。
window.onload = function(){
var databaseWebsites = firebase.database().ref('/websites').orderByChild('votes');
console.log(databaseWebsites);
databaseWebsites.on('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var webTemp = document.getElementById(childSnapshot.val().id);
webTemp.style.order = order;
var webText = webTemp.getElementsByClassName('likeText');
webText[0].innerHTML = childSnapshot.val().votes;
order--;
});
order = 0;
});
它按顺序获取所有数据并正确使用它。
问题是,我不希望在用户刷新页面之前更新前端的数据。该系统是一个按投票价值排序的投票系统,如果它不断更新,那将是一个糟糕的用户体验。
任何帮助将不胜感激。
由于
答案 0 :(得分:9)
将on
更改为once
,Firebase on
会侦听数据库节点中的更改并发送回复。
databaseWebsites.on('value', function(snapshot) {
到
databaseWebsites.once('value', function(snapshot) {
摘自Firebase文档
每次在指定的位置更改数据时都会调用value事件 数据库引用,包括对子项的更改。限制大小 您的快照,仅在观看所需的最低级别附加 变化。
答案 1 :(得分:0)
接受的响应不正确(可能已经过时?),因为once()
需要添加then()
实际上是
databaseWebsites.once('value').then(function(snapshot) {}
替换
databaseWebsites.on('value', function(snapshot) {}