Firebase响应太慢



嘿,伙计们,我正在使用Firebase实时数据库为我的React.js Web应用程序获取一些数据。

有一个名为Corr_UseruseState,它应该存储正确用户名的值。

我有一个function从Firebase获取用户名:-

function Login(){
const path =  firebase.database().ref("users").child(username);

path.once("value")
.then(snapShot => {            
setCorr_User(snapShot.child("username").val());

})

当我执行此console.log(Corr_User)时,它会打印一个空字符串,指示useState未更新。为了确认,我还记录了snapshot.val()。这打印了适当的值。

我可以从中理解,Firebase返回响应太慢,因此我的useState没有得到更新。我的理解正确吗?有什么方法可以让我的Login()函数等待响应吗?

请帮忙!!提前感谢。

编辑-好吧,我想有点困惑。代码就像这个

function Login(){
....
.once("value")
.then(snapShot => { // After fetching the data

setCorr_User(snapShot.child("username").val()); // Assigning the value
console.log(snapShot.val()); // This should be logged first
}) // End of function snapShot()
// This is still inside Login()
console.log(Corr_User) // But this is logged first
} // End of Login()

由此,我可以猜测Firebase的响应太慢,useState没有得到相应的更新,因为snapShot.val()仍然是空的。

数据从Firebase异步加载,当数据可用时调用then。这在实践中意味着您的console.log(Corr_User)console.log(snapShot.val())之前被调用。因此,任何需要数据库数据的代码都必须在then回调中,或者从那里调用。

对于刚接触异步API的开发人员来说,这是一个非常常见的障碍,所以我建议研究其中的一些链接:

  • 为什么Firebase在once((函数外失去引用
  • 检索Firebase数据并返回数据的最佳方式,或其他方式
  • 函数内部的Firebase查询返回null
  • 将父作用域中的变量传递给回调函数

最新更新