2017-07-31 8 views
0

Je reçois ce comportement bizarre où la sortie d'une paire valeur/clé d'un objet est supposée non définie bien qu'elle soit clairement définie dans l'objet et qu'elle soit imprimée .Mon objet renvoie des valeurs définies dans la console mais indéfini lors de l'accès direct

Mon code ressemble à ceci:

addLocation(loc: any) { 
    this.getLocationGPSFromFirebase(loc.$key).then(result => loc = Object.assign(loc, result)); 
    console.log(loc); 
    this.addLocationToLocalArray(loc); 
} 

La sortie du console.log dans le navigateur est: Object {adresse: "blablabla", ville: Object

{address: "blablabla"…} 
address: "blablabla" 
latitude: 37.412368 
longitude: 6.0755334 
$exists: function() 
$key: "uniqueKeyFromFirebase" 
__proto__: Object 

Mon code pour la création d'objet et poussée ultérieure vers le tableau:

addLocationToLocalArray(loc: Location) { 
    console.log(loc.latitude, loc.longitude); 
    this.tourLocs.push({ 
    address: loc.address, 
    latitude: loc.latitude, 
    longitude: loc.longitude 
    }); 
} 

t du console.log(loc.latitude, loc.longitude); est:

undefined, undefined 

Lorsque j'imprime le tableau, il ressemble à ceci:

[Object] 
0: Object 
address: "blablabla" 
latitude: undefined 
longitude: undefined 
__proto__: Object 
length: 1 
__proto__: Array(0) 

Ce comportement est tout à fait bizarre et je ne sais pas quelles sont les causes.

+2

Vous devez attendre la promesse avant d'appeler 'addLocationToLocalArray'! Il n'y a aucun moyen de l'obtenir immédiatement. Appeler 'then' ne bloque pas. – Bergi

+0

Merci pour l'aide les gars. Je ne cherchais pas les bons termes. Dois-je supprimer la question ou la laisser ouverte? Pas sûr des règles autour de cela. – Spurious

+0

Il est déjà fermé, vous n'avez pas besoin de le supprimer. – Bergi

Répondre

1

Vous appelez votre fonction add avant d'obtenir une réponse de l'API getLocation. Donc, vous devriez appeler votre méthode dans votre rappel d'API.

this.getLocationGPSFromFirebase(loc.$key) 
.then(result => 
    loc = Object.assign(loc, result) 
    console.log(loc); 
    this.addLocationToLocalArray(loc); 
);