2017-09-05 4 views
0

私は自分のデータベースで行った2つのルート上の不正行為の数を数えようとしています。以下は、それぞれのドライバとレポートデータベースの下で私のfirebaseデータベースの構造です:Firebase Uncaught TypeError:未定義の 'forEach'プロパティを読み取ることができません

[ドライバデータベース] - i.stack.imgur.com/Q6GKs.png

[レポートデータベース] - i.stack.imgur。 COM/ALWPu.png

ここで不正行為の回数カウントするための私のカウンターです: キャッチされない例外TypeError:未定義のプロパティ「のforEach」を読み取ることができません

 <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> 

は、私は、このエラーメッセージが表示されますが、 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]) => { 
    // ... 
    }) 
関連する問題