2017-06-18 83 views
0

我已訂閱FirebaseObjectObservable以從我的Firebase數據庫中獲取對象屬性的值。該屬性可以包含多個值,因此我將這些值存儲在本地數組變量中。Angular 2,無法遍歷數組

但我無法迭代通過使用forEach這個本地數組變量。所以我console.log這個數組變量。這個變量似乎有JSON格式,也許這就是爲什麼我無法迭代。請幫我找一種方法來遍歷這個變量。

*代碼和控制檯圖片:

Code Screenshot

Console Screenshot

*編輯*

我轉移了訂閱方法循環內的代碼。

getAttachments() { 
this.assignment.subscribe(asnDetails => { 
    if (asnDetails.fileKey) { 
    this.fileKeys.push(asnDetails.fileKey); 
    this.fileKeys[0].forEach(asnFileKey => { // <---- shifted this forEach loop inside subscribe 
     this.asnFiles = this._getAsnService.getAssignmentFiles(asnFileKey); 
     this.asnFiles.subscribe(file => { 
     this.fileNames.push(file.name); 
     }); 
    }); 
    } 
}); 
} 
+0

請在問題中輸入相關代碼。另外,請用正確的國際英語寫上「I」字樣的大寫字母。最後,請告訴我們關於您在學習曲線中的位置的不必要細節,或者您對將來的答案感到多麼感激。 – 2017-06-18 20:02:19

+0

[我如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – 2017-06-18 20:09:26

回答

0

不幸的是,我無法評論。這不是一個角度或火力點問題。
這是一個普通的數組,基於你的控制檯截圖。
您是否嘗試過遍歷this.fileKeys
如果有人可以發表評論,我會刪除這個答案。

+0

是的,我試着迭代this.fileKeys,但它似乎沒有進入循環。 'this.fileKeys.forEach(x => {console.log(「Iterating ...」); }); ' – PR7

+0

你可以做一個'console.log(this.fileKeys.length)''請發佈結果? – Garamaru

+0

'console.log(this.fileKeys.length)'返回0 – PR7

1

你的屏幕截圖中有一個嵌套數組。第一個長度爲1,嵌套長度爲2。因此,您可以訪問array[0].forEach(item => console.log(item))

+0

'this.fileKeys [0] .forEach(item => { console.log(item); }); '嘗試了這一點,得到這個錯誤:未捕獲(承諾):TypeError:無法讀取未定義的屬性'forEach' TypeError:無法讀取屬性'forEach'的未定義 .... – PR7

2

this.fileKeys值僅在subscribe處理程序中可用。這對異步編程很基本。您的控制檯日誌在訂閱後立即生效,並在訂閱發生更改之前執行。