for循环后没有填充数组?

时间:2017-05-22 04:26:27

标签: javascript reactjs react-native

我从未真正理解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在循环完成后仍然以空数组结束。到底发生了什么,我该如何解决?

1 个答案:

答案 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);
});