2016-12-25 82 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