2017-05-22 7 views
1

Ich habe den Variablenbereich in JavaScript nie wirklich verstanden, daher bin ich froh, dass ich tatsächlich auf dieses Problem gestoßen bin.Array nicht nach for-Schleife gefüllt?

Hier ist mein Problem:

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; 
} 

Also, was passiert, ist, dass places noch als leeres Array endet, nachdem die Schleife erfolgt. Was genau passiert hier und wie repariere ich es?

+0

statt Orte zurückzukehren, gibt ein Versprechen –

Antwort

2

Sie verwenden einen asynchronen Anruf. In Ihrem Code wurde function(snapshot) nicht aufgerufen, wenn console.log(places); ausgeführt wird.

so kann Rückruf verwendet werden:

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); 
}); 
Verwandte Themen