В веб-приложение, у меня есть это:Как определить, является ли событие child_added локальным?
function onChildAdded(snapshot) {
// ...
}
someFirebaseLocation.on('child_added', onChildAdded);
Я ищу на 100% надежный способ обнаружить ли немедленно child_added событие, так что я могу справиться два случая правильно: когда после толчка () функция вызывается немедленно (sync) vs, когда функция вызывается async.
Установка флага перед вызовом push() ненадежна. Я думаю. (Потенциальное состояние гонки, когда происходит асинхронное событие, и флаг может не сбрасываться при возникновении ошибки).
Другим вариантом было бы
var pushed = push(...);
, а затем в child_added
if (snap.name() === pushed)
, но входящее сообщение может иметь такую же .name(), таким образом, не может быть столкновения. Вероятность столкновения спорна, но я бы предпочел простой и водонепроницаемый способ получить информацию.
Было бы замечательно, если бы я мог это сделать:
function onChildAdded(snapshot, prevChildName, isImmediateEvent) {
if (isImmediateEvent) {
// Handle as sync event.
} else {
// Handle as async event.
}
}
someFirebaseLocation.on('child_added', onChildAdded);
или это
function onChildAdded(snapshot, prevChildName) {
if (snapshot.isFromImmediateEvent) {
// Handle as sync event.
} else {
// Handle as async event.
}
}
someFirebaseLocation.on('child_added', onChildAdded);
Есть ли какой-либо другой надежный вариант? В противном случае я попрошу парней Firebase, могут ли они вообще передать bool «isImmediateEvent» в обратный вызов (после моментального снимка, prevChildName).
Tobi
Tobi: Надеюсь, еще не поздно спросить вас, как вы, наконец, справились с этим. –
Привет Тоби: В моем случае я переупорядочиваю элементы в массиве с использованием приоритетов. Одно перемещение локального элемента может производить различное количество событий child_moved и child_changed. Первый огонь в пределах 20 мс второй между 200 мс и 1000 мс. Вкратце я получил переменное количество событий и широкий диапазон откликов. Как вы справились с этим. Вы не нашли решения? –
Как правило, изменение приоритета на одном элементе, поэтому его изменение позиции должно производить только одно дочернее событие и одно событие child_changed. И примечания здесь должны быть применимы. –