2017-07-31 61 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); 
);