2017-09-05 143 views
0

我正在嘗試計算我在數據庫中創建的兩條路線上的不當行爲數。下面是我的火力數據庫的結構下,驅動程序和報告數據庫分別爲:Firebase未捕獲TypeError:無法讀取屬性undefined

[驅動程序數據庫] - i.stack.imgur.com/Q6GKs.png

[報告數據庫 - i.stack.imgur。 COM/ALWPu.png

這裏是我的計數不端行爲的數計數器:

 <script> 
     var route1Count = 0; 
     var route2Count = 0; 
     var drivers; 
     var reports; 

     var driversRef = firebase.database().ref('drivers/'); 
     var reportsRef = firebase.database().ref('reports/'); 

     driversRef.once('value', (snapshot) => { 
      drivers = snapshot; 
     }); 

     reportsRef.once('value', (snapshot) => { 
      reports = snapshot; 
     }); 

     drivers.forEach((driver) => { 

      var violationCount = reports.filter((report) => report.val().plateNumber === driver.key).length; 

      if(driver.val().route === "Fairview - Quiapo"){ 
       route1Count += violationCount; 
      }else if(driver.val().route === "Quiapo - Fairview"){ 
       route2Count += violationCount; 
      } 
     }); 

     document.getElementById("demo").innerHTML = "route1: " + route1Count + "route2: " + route2Count; 

    </script> 

我收到此錯誤信息: 遺漏的類型錯誤:無法讀取的不確定財產「的forEach」at drivers.forEach,所有輸入將不勝感激!謝謝!

錯誤信息地點:https://i.stack.imgur.com/W5iGZ.png

+0

'執行driversRef.once' *異步* - 直到它完成'drivers'是'undefined'(我敢肯定,它不是由你調用'驅動程序時執行99%。 forEach') – UnholySheep

+0

謝謝,有沒有什麼辦法可以修復它? –

回答

0

你可以嵌套它們,或者如果你在一個支持ES6的承諾對象(代碼提示)的環境中運行,您可以使用once()返回一個承諾,更優雅這樣做:

Promise.all([driversRef.once('value'), reportsRef.once('value')]) 
    .then(([driversSnapshot, reportsSnapshot]) => { 
    // ... 
    }) 
相關問題