我从未真正理解JavaScript中的变量范围,所以我很高兴我遇到了这个问题。
这是我的问题:
getPlaceNames(){
var places = [];
var source =firebase.database().ref(`${this.props.countryProp}/${this.props.cityProp}`);
source.on('value', function(snapshot){
for (var key in snapshot.val())
places.push(key);
});
console.log(places);
return places;
}
所发生的事情是,places
在循环完成后仍然以空数组结束。到底发生了什么,我该如何解决?
答案 0 :(得分:2)
您正在使用异步调用。在您的代码中,执行function(snapshot)
时尚未调用console.log(places);
。
所以可以使用回调:
function getPlaceNames(callback){
var source = firebase.database().ref(`${this.props.countryProp}/${this.props.cityProp}`);
source.on('value', function(snapshot){
var places = [];
for (var key in snapshot.val()) {
console.log(key);
places.push(key);
}
callback(places);
});
}
getPlaceNames(function(places){
console.log(places);
});