2017-02-27 146 views
0

我还没有真正使用循环之前,我似乎无法弄清楚为什么我的代码不工作。希望有人帮助我指出正确的方向。JavaScript for循环不工作?

return firebase.database().ref('Users/' + uid + "/PDR").once('value').then(function display(dataSnapshot) { 

    //Number of times the loop should run returning a value 
    var number = dataSnapshot.val().Total; 

    var i; 
    for (i = 1; i < number; i++) { 

    //Each time loop runs changes Firebase reference by "1" 
    return firebase.database().ref('/Users/' + uid + "/PDR/" + i).once('value').then(function display(dataSnapshot) { 

     var num = dataSnapshot.val().number; 
     var dateFrom = dataSnapshot.val().dateFrom; 
     var dateTo = dataSnapshot.val().dateTo; 
     var dbActivity = dataSnapshot.val().activity; 

     //Each loop adds different data to table 
     document.getElementById("PDRTable").innerHTML += '<tr><td>' + num + '</td><td>' + dateFrom + '</td><td>' + dateTo + '</td><td>' + dbActivity + '</td></tr>' 

    }) 
    } 
}) 

我试图从我的Firebase后端提取数据并将其显示在表中,目前它只运行一次。

感谢您的任何帮助和建议!

+6

你必须在'for'环路'return'语句,所以它从功能第一次迭代期间返回。 – Barmar

+0

谢谢,甚至没有时钟,这将是原因。所有工作现在! – imconnor

回答

0

不确定dataSnapshot对象中发生了什么,但在javascript调试中的第一步是添加alert(“Here”);在你的代码,看看有什么(如果有的话)正在返回

//Number of times the loop should run returning a value 
    var number = dataSnapshot.val().Total;  

    var i; 
    for (i = 1; i < number; i++){ 
    alert("Here " + i); //Show me the loop variable 
    //Each time loop runs changes Firebase reference by "1" 
    return firebase.database().ref('/Users/' + uid + "/PDR/" + i).once('value').then(function display(dataSnapshot) { 
    alert(num); 
    alert(dateFrom); 
    alert(dateTo); 
    var num = dataSnapshot.val().number; 
    var dateFrom = dataSnapshot.val().dateFrom; 
    var dateTo = dataSnapshot.val().dateTo; 
    var dbActivity = dataSnapshot.val().activity;        

    //Each loop adds different data to table 
    document.getElementById("PDRTable").innerHTML += '<tr><td>'+ num +'</td><td>'+ dateFrom + '</td><td>'+ dateTo +'</td><td>'+ dbActivity +'</td></tr>' 
+0

当然有东西被退回;有一个返回声明。 (复杂的承诺的东西。) –

+1

重点是教他钓鱼。如果他使用警报调试方法,他应该注意到,一旦返回被触发,没有其他事件会被通知浏览器。 –

+1

虽然我同意你的思考过程,但这不是一个答案。 – jdmdevdotnet