2017-05-22 11 views
1

私は本当にJavaScriptの可変範囲を理解したことはないので、私は実際にこの問題に遭遇してうれしいです。forループの後に配列が移入されませんか?

ここに私の問題だ:

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); 
}); 
関連する問題