Firebase child_added只能添加子项
从Firebase API:
添加小孩:这个位置的每个初始小孩都会触发一次该事件,每次添加一个新小孩时都会再次触发。
一些代码:
listRef.on('child_added', function(childSnapshot, prevChildName) { // do something with the child });
但是由于该函数在这个位置被调用一次,有没有办法只得到实际添加的孩子?
要追踪从某个检查点以来添加的事物而不提取以前的logging,可以使用endAt()
和limit()
来获取最后一条logging:
// retrieve the last record from `ref` ref.endAt().limit(1).on('child_added', function(snapshot) { // all records after the last continue to invoke this function console.log(snapshot.name(), snapshot.val()); });
limit()
方法已被弃用。 limitToLast()
和limitToFirst()
方法将其replace。
// retrieve the last record from `ref` ref.limitToLast(1).on('child_added', function(snapshot) { // all records after the last continue to invoke this function console.log(snapshot.name(), snapshot.val()); // get the last inserted key console.log(snapshot.key()); });
对我来说,逻辑就是要有价值 – 例如“地位” – 在决定是新的还是旧的logging之前需要validation,然后将“状态”设置为不同的值,所以我没有下一次:
@Override public void onChildAdded(DataSnapshot dataSnapshot, String previousChildKey) { if(dataSnapshot.hasChildren()) { String Id = (String) dataSnapshot.child("user_id").getValue(); String status = (String) dataSnapshot.child("status").getValue(); if (Id != null && Id.equals(storedId) && status != null && status.equals("created")) { Log.d("INCOMING_REQUEST", "This is for you!"); sessionsRef.child(dataSnapshot.getKey()).child("status").setValue("received"); } } }
Swift3解决scheme:
您可以通过以下代码检索您以前的数据:
queryRef?.observeSingleEvent(of: .value, with: { (snapshot) in //Your code })
然后通过下面的代码观察新的数据。
queryRef?.queryLimited(toLast: 1).observe(.childAdded, with: { (snapshot) in //Your Code })
我尝试了其他的答案,但至less为最后一个孩子调用了一次。 如果你的数据有时间键,你可以这样做。
ref.orderByChild('createdAt').startAt(Date.now()).on('child_added', ...