2017-11-25 124 views
0

我使用服務將數組元素添加到數組中,該服務成功添加了元素。我可以看到使用console.log登錄的數據無法訪問數組的元素

但我無法訪問該元素。

this.routingService.getNode(startNode).subscribe(node => { 
     node.forEach(node => { 
     this.openSet.push(new MapNode(node.id, node.lon, node.lat, this.routingService.getNodeNeighbours(node.id))); 
     }); 
    }); 

    console.log(this.openSet); // this prints out the below screenshot 

enter image description here

然而,當我使用類似:

console.log(this.openSet[0]); 

我得到的 '未定義' 輸出。我不確定我現在是否真的很厚我現在在訪問它或不...

任何想法?

+0

你可以發佈你所看到的,當你做的console.log(JSON.stringify(this.openSet)); – Sajeetharan

+0

請將javascript標籤添加到問題 – baao

+2

[如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-一個異步調用) – baao

回答

1

subscribe工作異步,因此console.log()將在forEach循環運行之前記錄。這是相同的異步行爲,在這一小段代碼

let foo = []; 
 

 
setTimeout(() => { 
 
    foo.push(1); 
 
    foo.push(2); 
 
}, 500); 
 

 
console.log(foo); // logs []

請參閱重複的職位如何與asynchronity工作選擇。

How to return the response from an asynchronous call?

+0

啊,我明白你的意思了。使用JSON.stringify打印數組返回空,所以確認你的答案。謝謝! :) – Travisty