gpt4 book ai didi

javascript - Firebase .then 与 .on ('value' )

转载 作者:数据小太阳 更新时间:2023-10-29 05:11:47 26 4
gpt4 key购买 nike

我试图让 .then().on() 一起工作,但它只与 .once() 一起工作.

我得到 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))
})
})

但我不喜欢它两次查询 ref 的事实。

在此示例中,我将如何获得每个 玩家的答案?什么是更正确的方式?因为我认为这不是 Firebase 开发人员的本意。

.on() 没有实现的原因是什么?因为 playersSnapshot.forEach(...).then 也不是一个函数...每当 .on('value ') 触发器?

最佳答案

这里是 firebaser

我不能完全确定你问题的某些部分,所以只会回答我能回答的部分。

what is the reasoning that [then()] is not implemented for .on()?

我们在 Firebase JavaScript 客户端中实现了对 Promises 的支持。 promise 的定义是它只解决(或失败)一次。由于 Firebase on() 方法可以多次接收更新的数据,因此它不符合 promise 的定义。

How do I execute something only once whenever the .on('value') triggers?

当你只想对一个事件响应一次时,你应该使用once()方法。

我不确定为什么您在使用 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 中重现该问题吗?

关于javascript - Firebase .then 与 .on ('value' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40402110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com