Следующий код создает бесконечный цикл повторения child_added, хотя я никогда не добавляю ребенка. Узлы удаляются. Я просто петлю навсегда. Как я могу это исправить?Почему я делаю событие child_added при удалении?
//notifications branch is pre-populated when I get here:
notifications.startAt(null).on('child_added', processNotification, logError);
function processNotification(notification)
{
removeNotification(notification);
}
function removeNotification(notification)
{
var child = notifications.child(notification.name());
console.log("REMOVING", child.toString());
child.remove();
}
Что необходимо войти в одни и те же четыре узла (А, В, С, D) удаляется:
REMOVING https://my.firebaseio.com/experimental/-JVMi0_4poXfOWUt5g49 - A
REMOVING https://my.firebaseio.com/experimental/-JVMi1Y_bFwZAkffRel4 - B
REMOVING https://my.firebaseio.com/experimental/-JVMi2lyhKj8z27ik71x - C
REMOVING https://my.firebaseio.com/experimental/-JVMhzazdgHYAstqxu8L - D
REMOVING https://my.firebaseio.com/experimental/-JVMi0_4poXfOWUt5g49 - A
REMOVING https://my.firebaseio.com/experimental/-JVMi1Y_bFwZAkffRel4 - B
REMOVING https://my.firebaseio.com/experimental/-JVMi2lyhKj8z27ik71x - C
REMOVING https://mu.firebaseio.com/experimental/-JVMhzazdgHYAstqxu8L - D
...
Это также происходит, если вы заменяете 'var child = notifications.child (notification.name());' с 'var child = notification.ref();' –
Ну, проблема в том, что вызов не является ссылкой , Устранение происходит. Я не вижу, как это имеет значение, если оно работает. Что вы думаете? – user9170
Мое рассуждение состоит в том, что он выглядит запутанным, и у меня не было времени воспроизвести проблему. Кроме того, вы также можете посмотреть https://github.com/firebase/firebase-work-queue, что делает что-то похожее на то, что вы пытаетесь. Они используют обработчик 'transaction', который возвращает' null', чтобы удалить обработанные элементы. –