Javascript 我无法从firebase检索用户名
我目前正在尝试以react native从firebase数据库返回用户名。console.log在函数内部工作,但不记录函数外部的任何内容。我不知道我错在哪里。这是我的密码Javascript 我无法从firebase检索用户名,javascript,firebase,react-native,firebase-realtime-database,Javascript,Firebase,React Native,Firebase Realtime Database,我目前正在尝试以react native从firebase数据库返回用户名。console.log在函数内部工作,但不记录函数外部的任何内容。我不知道我错在哪里。这是我的密码 componentWillMount() { firebase.database().ref('/users/' + this.userId + '/username').once('value').then(function(snapshot) { this.username = snapshot.v
componentWillMount() {
firebase.database().ref('/users/' + this.userId + '/username').once('value').then(function(snapshot) {
this.username = snapshot.val();
console.log(this.username)
});
console.log(this.username)
this.setState({
username: this.username
})
}
这是因为JavaScript的异步特性。您应该在回调中执行
setState
firebase.database().ref('/users/' + this.userId + '/username').once('value').then(snapshot => {
this.username = snapshot.val();
console.log(this.username);
this.setState({
username: this.username
})
});
这是因为JavaScript的异步特性。您应该在回调中执行
setState
firebase.database().ref('/users/' + this.userId + '/username').once('value').then(snapshot => {
this.username = snapshot.val();
console.log(this.username);
this.setState({
username: this.username
})
});
出于某种原因,将语法更改为es6的arrow函数使代码能够在函数中添加this.setState
componentWillMount() {
firebase.database().ref('/users/' + this.userId + '/username').once('value').then((snapshot) => {
this.username = snapshot.val();
console.log(this.username)
this.setState({
username: this.username
})
})
}
出于某种原因,将语法更改为es6的arrow函数使代码能够在函数中添加this.setState
componentWillMount() {
firebase.database().ref('/users/' + this.userId + '/username').once('value').then((snapshot) => {
this.username = snapshot.val();
console.log(this.username)
this.setState({
username: this.username
})
})
}
这是预期的行为:回调中的代码运行(可能要晚很多)比它后面的代码。请参阅我在这里的解释:这是预期的行为:回调中的代码运行(可能要晚很多)比它之后的代码运行。请看我在这里的解释:可能的未经处理的承诺拒绝,请使用arrow函数进行回调。它将在回调中自动绑定此。更新了我的答案。可能未处理的承诺拒绝。如果您已经发现,请使用箭头函数进行回调。它将在回调中自动绑定此。更新了我的答案。