2017-04-02 3 views
0

ここに、シナリオがあります:Firebase(例:5オブジェクト)からの初期ペイロードをfirebaseRef_1.onceコールバックを使用)から取得します。次に、受け取った各オブジェクトを新しいFirebase refに変換します。その新しく生成されたrefは次のようになります。例えば、私はその.onceコールに5つの入ってくるオブジェクトを持っている場合はFirebase用に生成されたリファレンスの動的配列をリッスンする最善の方法は?

"data/ccccyyyyotKKiWC2xaV1WZ7H3/things/-KgXo121225H9_Nks1O" 

、その後私は(以下のコードを参照してください)5、参考文献を作成します。

a)は、これら5つの参照文献のそれぞれに.onリスナーを作成します。

は、私が作成したら/ REF(S)私はしたいが発生しました。 (が言うことができます場合は

b)参照)、新たなデータの後に1「行」のfirebaseRef_1に到着したいくつかの時間、私は新しいREFを生成して、リスナーを作成したい - しかし、今、ちょうどその新しく追加された項目ため。それ以外の場合、(現在の6つの)要素のすべてをループしようとすると、元の5つの要素(refs)にすでにリスナーが添付されていると私は警告します。

私は「.onceで、すべての」全体のペイロードを得ることができるように、私が最初に.onceコールを使用するように考えていた理由は、ある(しゃれが意図した!)速い(ネイティブ反応)ListViewを移入せています。私は.child_addedのアプローチを使用してみましたが、初期ロード(これらの5行)では.child_addedが5回呼び出されますので、私は好きではないListViewで行が1つずつ表示されることがわかります。

私は上記で説明したことを達成するためにコードでこれを最もうまく構成する必要がありますか?

generateTheRefs() { 
    firebase.database() 
    .ref('data/' + firebaseUID + '/initialPath') 
    .once('value', (snapshot) => { 

    snapshot.forEach(childSnapshot => { 
     var childData = childSnapshot.val(); 
     let path = `data/${childData.item1}/things/${childData.item2}`;   

     //now create a .on listener 
     firebase.database() 
     .ref(path) 
     .on('value', (snapshot) => { 
      //.... 
     }); 
    }); 
    }); 
} 

答えて

0

あなたができます:私はちょうどこのよう.onceコールが必要です

  1. を一度()と全体の初期設定を読んで、それを表示します。変数をどこかに格納してください。
  2. その後すぐにon( 'child_added')を使用してリスナーを登録し、最初にそれを保存したときに一度()から以前に収集しなかったものに対してのみ行動します。
0

時間の経過とともにドリブルしないように、すべての結果を同時に使用するように思えます。 promiseとpromise.all()の配列を使用して、それらを使用する前にそれらがすべて到着するのを待つことができます。

関連する問題