2016-12-25 102 views
0

我有一個有趣的問題。我所做的一般想法是從Firebase數據庫提取數據,並根據該數據填充表格。一切都在最初的人口中完美運行 - 單元格和行都按照它們應該存在的方式填充,但奇怪的問題是腳本似乎會隨機執行。我已將輸入數據記錄到控制檯,並且可以在一段時間後看到它打印兩次。Java/Firebase腳本執行多次

如果我的網頁間導航,或重新載入頁面這第二次執行不會發生 - 無論是在這些案件中一切正常,因爲它應該。當我鎖定後重新登錄到計算機時發生SEEMS問題?有沒有人有任何想法可以在這裏發生什麼?下面的腳本的相關部分:

const table = document.getElementById('myTable'); 
firebase.auth().onAuthStateChanged(firebaseUser => { 
    if (firebaseUser) { 
     let user = firebase.auth().currentUser; 
     let uid = user.uid; 
     const dbRef = firebase.database().ref().child("data/" + uid); 
     dbRef.once('value', snap => { 
      var dataCount = snap.child("secondData").numChildren(); 
      var datalist = snap.child("secondData").val(); 
      var dataArray = Object.keys(datalist).map(function(k) { 
       return datalist[k] 
      }); 
      pullAllInfo(dataCount, dataArray); 
     }); 
    } 
}); 

function pullAllInfo(count, array) { 
    let k = 0; 
    let dataArray = []; 
    for (i = 0; i < count; i++) { 
     let specificRef = firebase.database().ref().child("secondData/" + array[i]); 
     specificRef.once('value', snap => { 
      var optionsTag = array[k]; 
      k++; 
      var dataId = snap.child("id").val(); 
      var dataName = snap.child("name").val(); 
      var dataCount = snap.child("data").numChildren(); 
      dataArray.push(dataId, dataName, dataCount, optionsTag); 
      if (k == count) { 
       buildTable(dataArray); 
       console.log(dataArray); 
      } 
     }); 
    } 
} 

正如你可以從代碼中看到上面我打電話.once()每個參考,這將防止從典型.on()呼叫數據複製。只是似乎無法找出這一個。此外,我還有一臺iMac,僅供任何人對我的潛在電腦解鎖診斷感到好奇。

謝謝大家!

回答

0

我通過創建另一個全局布爾值preLoaded解決了這個問題。在開始時,它被設置爲false,並且一旦數據被加載並傳遞以建立表格,它就被設置爲true。它現在看起來像這樣:

if(k == count && preloaded == false){ 
      preloaded = true; 
      console.log(dataArray); 
      buildTable(dataArray); 
     } 

All set!

1

很可能,身份驗證狀態正在改變並設置您的功能。嘗試firebase.auth().onAuthStateChanged下扔日誌是這樣的:

firebase.auth().onAuthStateChanged(firebaseUser => { 
    console.log('auth state changed', firebaseUser); 
    if (firebaseUser) { 

我的猜測是,你會看到AuthState正在發生變化,當你登出/從您的計算機登錄。

+0

好的,我會嘗試一下,在我目前的潛在解決方案成功或失敗後(我會出於好奇) – Ethan