2017-11-29 11 views
0

最近追加された子ノードは、データベースの最後の子ノードではなく、プッシュする時点でfirebaseデータベースから取得したいと考えています。firebase child_addedイベントの問題

問題は、典型的なchild_addedイベントは、最初にページを読み込んでも最後の子を取得するということです。

この時点で新しいノードが追加されていない場合でも、このコードは最後の子を出力します。

firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) { 
    console.log(snapshot.val()); 
}); 

この「ハック」は現在私のために働いていますが、適切な方法で書き直す方法はありますか?

firebase.database().ref().on('child_changed', function() { // listen only when there are some changes in entire db, the key solution for this purpose. 
    firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) { 
     console.log(snapshot.val()); 
    }); 
}); 

この時点では何も新しいノードが追加されなかったのであれば、なぜちょうどchild_addedリスナーが動作しますか?

+2

これは[documentation](https://firebase.google.com/docs/reference/js/firebase.database.Reference#on)によると予想される動作です。「このイベントは最初の子供この場所で*、新しい子供が追加されるたびに再度トリガーされます... " –

+0

だから、私の"ハック "は合法ですか? :) –

+0

いいえ、この "ハック"は盗聴されています:( –

答えて

0

ページロード時にfirebaseイベントを最初にスキップすることを確認するbool varを割り当てることでこれを解決しました。

var child_added_first = true; 
firebase.database().ref("coupons").limitToLast(1).on('child_added', function(snapshot) { 
    if (!child_added_first) { 
     console.log(snapshot.val()); 
    } 
    child_added_first = false; 
}); 

さらに、私は単にコンソールパネルで私firebase DBからいくつかのノードを削除すると、クライアント上のfirebaseによってトリガーされる「child_added」。どうして?

他のリアルタイムのSaaSデータベースをもっとフレンドリーなAPIやドキュメントで見ているようです。