【发布时间】:2021-04-06 05:00:36
【问题描述】:
我需要从我在 firebase 中的实时数据库中获取 json 数据并为其设置一个变量。我尝试在下面的代码中这样做
useEffect(() => {
let database = firebase.database();
database.ref().on('value', async (snapshot) => {
await setQuestions(snapshot.val());
console.log('questions here ', questions)
})
},[]);
console.log 在此处输出问题 null,而不是记录实际数据。我知道这是一个涉及行执行顺序的问题,因为我已经证明我实际上是从数据库中提取数据。它只是没有完成将它拉到我需要的地方。 据我了解, await 将在 async 块内停止执行,直到带有 await 的代码行完成。然而,这并没有发生。所以要么我误解了异步函数的工作原理,要么我没有将 async 或 await 关键字放在我需要的地方。任何帮助表示赞赏。
编辑:问题已定义。在我的代码中如下所示
const [questiona, setQuestions] = useState(null);
【问题讨论】:
-
您是否检查过 setQuestions 正在返回一个承诺?
-
是否在 setQuestions 中设置了 questiona?
-
questiona 似乎没有定义。
-
@controlaltdel questiona 已定义。我刚刚编辑了原始帖子以显示我如何初始化它。我将其设置为 null,这解释了为什么当我尝试打印问题时 console.log 返回 null。问题是我似乎无法在需要时将问题设置为 snapshot.val()。
标签: javascript node.js firebase firebase-realtime-database