私は.then()
を.on()
と動作させようとしていますが、.once()
としか動作しません。Firebase .then with( 'value')
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))
})
})
しかし、私はそれが二回REFを照会しているという事実が好きではない:
on()
でそれをしようとしたとき、私は、それでは私が今持っていることはこれです、playersRef.on(...).then is not a function
を取得します。
この例ではeach
さんの回答はどうなりますか?何がもっと正しいでしょう方法? Firebaseの開発者がこれを意図した方法ではないと思うからです。
.on()
に実装されていない理由は何ですか? playersSnapshot.forEach(...).then
も関数ではないので...何かを実行するには.on('value')
がトリガするたびにを1回だけ実行しますか?
'forEach'の後に' .then'を実行すると、 'layersSnapshot.forEach(...)、それは関数ではありません。 ' – BlockChange
' then() 'を2回扱うからです。スニペットの4行目に、そして12行目に再び表示されます。プロミスは連鎖可能ですが、最初の 'then()'ハンドラから別の約束を返す場合に限ります。 –