【发布时间】:2019-06-28 18:41:13
【问题描述】:
我正在制作一个带有 firebase 身份验证的登录按钮,该按钮在 promise 中引用了我的 firebase 实时数据库。当我尝试提升该数据以更改组件状态时,它变为空。
我尝试了一种更简单的方法,在 firebase 引用之外声明一个变量,然后尝试在函数中设置该变量。
我还尝试将“that”设置为空数组变量,然后将其作为数组访问。
我尝试将“that”设置为 this.state.ign,但是当我尝试访问所需的数据时,它变为 null
**edit - 我也认为这是一个异步问题,所以我使用了 setTimeout 15000 来允许 15 秒过去,然后再尝试在 firebase 参考之外使用 console.log。
var that = this;
firebase.database().ref("users/" + this.state.userid).on("value", function (snapshot) {
var userIGN = (snapshot.val().ign);
console.log(userIGN); // WORKS - gives ign from database
that.setState({ ign: userIGN }); // WORKS - sets that.state.ign to ign from database
console.log(that.state.ign); // WORKS - gives ign from that.state
})
console.log(that); // WORKS - shows object that has state with ign
console.log(that.state); // FAIL - shows state object, but ign is null now?!
第二个 console.log(that.state.ign) 应该显示来自 firebase 参考的数据点
【问题讨论】:
-
我也试过 setTimeout 15000 。忘记列出我也试过了!
-
哇,好的,所以我将超时设置为 30000,现在它可以工作了!所以这是一个异步问题!!炸毁这可怕的网速! *感谢@FrankerZ
-
等一下。你错过了重点。 Firebase 是异步的,数据仅在闭包内有效。之后的代码将在数据从 Firebase 返回之前执行。不要依赖延迟或超时来获取您的数据 - 它可能会有很大差异。见this answer 和this super good answer 甚至here
标签: javascript reactjs firebase firebase-realtime-database