2017-07-31 56 views
0

我收到这种奇怪的行为,其中对象的键值对的输出被假定为未定义,尽管它清楚地在对象中定义并且正在打印输出。我的对象返回控制台中定义的值,但直接访问时未定义

我的代码如下所示:

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

console.log的浏览器的输出是: 对象{地址: “blablabla” 城市:对象

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

我的代码对象创建并随后推送到阵列:

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

输出在console.log(loc.latitude, loc.longitude);的t为:

undefined, undefined 

当我打印的阵列,它看起来像这样:

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

这是绝对怪异的行为,我不知道是什么原因造成的。

+2

你必须在调用'addLocationToLocalArray'之前等待承诺!没有办法立即得到它。调用'然后'不会阻止。 – Bergi

+0

感谢您的帮助。我没有寻找合适的条款。我应该删除问题还是保持开放?不知道这个规则。 – Spurious

+0

已关闭,您不必删除它。 – Bergi

回答

1

在从getLocation API获取响应之前,您正在调用您的add函数。所以你应该在你的API回调中调用你的方法。

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