Javascript Firebase.then with.on(';value';)
我正在尝试使Javascript Firebase.then with.on(';value';),javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试使.then()与.on()一起工作,但它只与.once()一起工作 我在(…)上获得了playersRef.on.。当使用on()尝试它时,它不是一个函数 所以我现在得到的是: let nodesRef = Firebase.database().ref('players') let answers = {} playersRef.on('value', (playersSnapshot) => { playersRef.once('value')
.then()
与.on()
一起工作,但它只与.once()
一起工作
我在(…)上获得了playersRef.on.。当使用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))
})
})
但我不喜欢它两次查询ref的事实
在本例中,我如何获得每个玩家的答案?什么是更正确的方法?因为我不认为这是Firebase开发者想要的方式
有什么理由不为.on()
实现它?因为playersSnapshot.forEach(…)。那么也不是一个函数。。。当.on('value')
触发时,我如何只执行一次
我不能完全确定你问题的某些部分,所以我只能回答我能回答的部分
对于.on()
,没有实现[then()
]的原因是什么
我们在Firebase JavaScript客户端中实现了对承诺的支持。承诺的定义是它只能解决(或失败)一次。由于Firebaseon()
方法可以多次接收更新的数据,因此它不符合承诺的定义
如何在触发.on('value')
时只执行一次
如果只想对事件响应一次,则应使用one()
方法
我不确定您为什么在使用forEach()
时遇到问题。以下方面应起作用:
playersRef.on('value', (playersSnapshot) => {
playersSnapshot.forEach((playerSnapshot) => {
let playerKey = playerSnapshot.key
let answersRef = playerSnapshot.child('answers')
if (answersRef .exists()){
answers[playerKey ] = answersRef .val()
}
})
})
如果您在执行此操作时遇到问题,能否在jsbin中重现该问题?firebaser
我不能完全确定你问题的某些部分,所以我只能回答我能回答的部分
对于.on()
,没有实现[then()
]的原因是什么
我们在Firebase JavaScript客户端中实现了对承诺的支持。承诺的定义是它只能解决(或失败)一次。由于Firebaseon()
方法可以多次接收更新的数据,因此它不符合承诺的定义
如何在触发.on('value')
时只执行一次
如果只想对事件响应一次,则应使用one()
方法
我不确定您为什么在使用forEach()
时遇到问题。以下方面应起作用:
playersRef.on('value', (playersSnapshot) => {
playersSnapshot.forEach((playerSnapshot) => {
let playerKey = playerSnapshot.key
let answersRef = playerSnapshot.child('answers')
if (answersRef .exists()){
answers[playerKey ] = answersRef .val()
}
})
})
如果您在执行此操作时遇到问题,是否可以在jsbin中重现该问题?当我尝试时。然后在forEach
之后,我得到错误:layersSnapshot.forEach(…)。then不是一个函数
是的,这是因为您处理then()
两次:一次在代码段的第4行,另一次在第12行。承诺是可链接的,但前提是您从第一个then()
处理程序返回另一个承诺。当我尝试。然后在forEach
之后,我得到错误:layersSnapshot.forEach(…)。then不是一个函数
是的,这是因为您处理then()
两次:一次在代码段的第4行,然后再次在第12行。承诺是可链接的,但前提是您从第一个then()
处理程序返回另一个承诺。