Использование выражения Immediately-Вызываемой функции , самый простой и удобный способ заключить индексную переменную:
for (var i = 0; i < 3; i++) {
(function(index) {
console.log('iterator: ' + index);
//now you can also loop an ajax call here
//without losing track of the iterator value: $.ajax({});
})(i);
}
Это отправляет итератору i
в анонимный функцию которого мы определяем как index
. Это создает закрытие, где переменная i
сохраняется для последующего использования в любых асинхронных функциях внутри IIFE.
Попробуйте использовать addChildEventListener:
getDatabase().getReference().addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
})
Эй вы попробовали использовать прослушиватель событий child_added?
Детские события
Детские события запускаются в ответ на конкретные операции, которые происходят с дочерними узлами из одной операции, такие как новый дочерний элемент, добавленный с помощью метода push () или ребенок обновляется через метод updateChildren (). Каждый из них может быть полезен для прослушивания изменений в конкретном узле в базе данных.