首页 > 解决方案 > 从我的 firebase 数据库获取数据时,如何正确使用 async 和 await?

问题描述

我需要从我在 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);

标签: javascriptnode.jsfirebasefirebase-realtime-database

解决方案


await除非 RHS 上的值是承诺,否则无效。

setQuestionsuseState是,我假设,一个钩子的集合部分。它不返回承诺。

如果确实如此,那么questiona变量(我假设它是该挂钩的数据部分)无论如何都不会在当前范围内更新。)


如果你想看看是什么questiona,那么在你正在使用的 React 组件的下一次渲染中记录它。


const [questiona, setQuestions] = useState(someDefaultValue);

console.log(questiona);

useEffect(() => {
  let database = firebase.database();
  database.ref().on(
    'value', 
    (snapshot) => setQuestions(snapshot.val())
  ); 
},[]);

推荐阅读