Я пытаюсь получить .then()
для работы с .on()
, но он работает только с .once()
.Firebase. Then with .on ('value')
я playersRef.on(...).then is not a function
, при попытке его on()
Так что у меня сейчас это:
let nodesRef = Firebase.database().ref('players')
let answers = {}
playersRef.on('value', (playersSnapshot) => {
playersRef.once('value').then((playersSnapshot) => {
playersSnapshot.forEach((playerSnapshot) => {
let playerKey = playerSnapshot.key
let answersRef = playerSnapshot.child('answers')
if (answersRef .exists()){
answers[playerKey ] = answersRef .val()
}
})
}).then(() => {
console.info(answers);
dispatch(setPlayerAnswers(answers))
})
})
Но мне не нравится тот факт, что он запрашивает реф дважды.
Как я могу получить ответ each
в этом примере? Что было бы более правильным способом? Потому что я не думаю, что это было так, как планировали разработчики Firebase.
И какова аргументация, что он не реализован для .on()
? Потому что playersSnapshot.forEach(...).then
также не является функцией ... Как мне выполнить что-то только один раз при запуске .on('value')
триггеров?
Когда я пытаюсь '. Then' после' forEach', я получаю сообщение об ошибке: 'layersSnapshot.forEach (...), тогда это не функция' – BlockChange
Да, это потому, что вы обрабатываете' then() 'дважды: один раз в строке 4 фрагмента, а затем снова в строке 12. Обещания связаны друг с другом, но только если вы вернете другое обещание от первого обработчика 'then()'. –