2016-12-25 5 views
0

興味深い問題があります。私がやっていることの一般的な考え方は、Firebaseデータベースからデータを取り込み、そのデータに基づいてテーブルを作成することです。最初の人口ではすべてが完璧に実行されます。セルと行は必要に応じて作成されますが、スクリプトはランダムに再実行されるように見えます。私は着信データをコンソールに記録しており、ある程度の時間が経過すると2回印刷されることがわかります。Java/Firebaseスクリプトを複数回実行する

この2回目の実行は、ページ間を移動したり、ページをリロードしたりする場合には発生しません。どちらの場合でも、すべてが正常に動作します。問題は、ロックした後に私のコンピュータに戻ってログオンすると起こるのですか?誰もが何が起こっている可能性があるか考えていますか?以下のスクリプトの関連部分:

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); 
      } 
     }); 
    } 
} 

私は典型的な.on()コールからのデータの重複を防ぐことになる、各参照用.once()を呼ぶAM上記のコードから見ることができるように。ちょうどこのことを理解しているようです。また、私は潜在的なコンピュータロック解除の診断について興味がある人のためだけにiMacを持っています。

ありがとうございます!

答えて

0

別のグローバルブール値preLoadedを作成してこの問題を解決しました。最初はfalseに設定され、データがロードされてテーブルを構築するために渡されると、trueに設定されます。これは次のようになります。

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

すべてセット!

1

ほとんどの場合、認証状態が変更され、機能がオフに設定されています。このようfirebase.auth().onAuthStateChangedの下でログを投げてみてください。

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

私の推測では、あなたがログアウト時/ AuthStateが変化していることがわかり、コンピュータからログインしましょうということです。

+0

私の現在の潜在的な解決策が成功または失敗した直後に、私はこれを試してみます(私は好奇心から外れます) – Ethan

関連する問題