让我首先展示一下我所拥有的和我迄今为止所尝试的:
var database = firebase.database().ref().child('Datah/Real');
database.orderByChild("result").equalTo("RUNNING").once('value', function(snapshot){
var content = '';
snapshot.forEach(function(data){
var key = data.ref.getKey();
var time = data.val().time;
var quote = data.val().quote;
var type = data.val().type;
var date = new Date(time * 1000);
var current = 0;
firebase.database().ref().child("Datah/Prices/" + quote).once("value", function(snapshot) {
console.log(snapshot.key+" : "+snapshot.child("price").val());
current = snapshot.child("price").val();
});
content += '<tr>';
content += '<td>' + date.toLocaleString() + '</td>';
content += '<td>' + quote + '</td>';
content += '<td>' + type + '</td>';
content += '<td>' + current + '</td>';
content += '</tr>';
});
});
$('#ex-table').append(content);
var tbody = $('table tbody');
tbody.html($('tr',tbody).get().reverse());
});
我在firebase中有从第一个引用检索的数据:Datah/真实的,并且此数据在 quote 下包含一个字符串值,对于我要检索的每个数据,我希望使用 quote 从另一个引用中检索相关数据:Datah/Prices。在该引用中,我只想从等于 quote 的子项中检索数据,因此:Datah/Prices/quote。当我获得此值时,我希望用它填充我的表。
我设法获得了第一个数据,它正确地填充了我的表,挑战在于第二个快照,它应该返回 current,因为它仍然返回预定义的0,但是在控制台上:console.log(snapshot.key+" : "+snapshot.child("price").val());
它显示它实际上正在检索值,但为什么在我的表中 current 总是0,而在控制台中不是0?
1条答案
按热度按时间cwxwcias1#
这是因为代码异步运行
这段代码正确地获取了当前价格,但只是在其余代码运行之后。
要解决这个问题,把所有的表更新移到“current = snapshot..."之后怎么样,这意味着它必须在异步代码块内部,就像我上面展示的那样。
您可能仍然需要稍微修改一下代码才能进行jQuery更新--我不熟悉jQuery,所以我可能没有在块中移动 * 完全 * 正确的代码。