2017-09-05 36 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]) => { 
    // ... 
    }) 
相关问题