2017-01-07 2 views
2

Предполагается, что это будет какая-то разница на управлении эти два кода?на («» child_added VS один раз ("child_added

ref.on('child_added',function(child,prev){ 
console.log(child.key+prev); 
} 
ref.off(); 

и

ref.once('child_added',function(child,prev){ 
console.log(child.key+prev); 
} 

Я был удивлен, что второй не перебирает между Чайлдс!

Что я делаю неправильно здесь (edited->) , чтобы получить полный список Чайлдс?

ответ

4

Когда вы используете once, вы запрашиваете одно событие указанного типа. Итак, once("child_added" запускает одно событие child_added.

Факультативно, что ваш on срабатывает несколько раз, скорее всего, это состояние гонки из-за того, что вы заказали звонки. Я ожидаю, что это также вызывать только один раз:

ref.on('child_added',function(child,prev){ 
    console.log(child.key+prev); 
    ref.off(); 
} 

Но я должен признать, что это довольно редко, так что я не думаю, что я когда-либо тестировал.

+0

Хорошо, тогда ... Не существует способа позвонить ВСЕМ детям один раз с какой-то альтернативой «на»? (потому что ... когда есть еще один «на» в тот же Реф, который не следует отключать, и я отключу этот новый, первый тоже выключится, и если я не выключу эту новую " on ", он дважды запускается при вызове функции, которая включает его) – davidtaubmann

+1

Извините, но это звучит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy- проблема) - трудно помочь больше с помощью только что предоставленного вами фрагмента. В общем: вы должны вызывать 'off()', когда хотите прекратить прослушивание, но не выходить из процесса (т. Е. Перемещаться от веб-страницы, если это ваша платформа). Если вы хотите получить только начальные дочерние элементы коллекции, вы можете использовать комбинацию «child_added» и «value» слушателей. См. Http://stackoverflow.com/questions/38969411/firebase-run-script-after-retrieving-existing-data/38976115#38976115 –

+0

Так что я предполагаю, что для создания итерации между дочерними элементами Ref (с неизвестными ключами) I должен вызывать Ref 'once' с' value' и повторять между полученным 'val()' с нормальным JS 'for (x in child.val())' ... right? – davidtaubmann

Смежные вопросы