2016-07-07 64 views
1

當我設置一些REST服務的匿名回調函數,我得到一個非常奇怪的行爲,其中,如果我的REST服務的根本console.log的結果,我得到預期的有效載荷(一個對象數組)。然而,當我運行在同一個陣列上的循環,並嘗試獲得一些關鍵的價值,我得到一個錯誤,因爲顯然產品undefined不確定項打字稿for循環

... 
callback: (result) => { 
    console.log(result); // outputs [{text: 'foo'}, {text: 'bar'}] 
    for(let item of result){ 
     console.log(item.text); // error can't read text of undefined 
     console.log(item); // HOWEVER... this works... :/ 
    } 
} 

任何想法?必須有某種異步行爲發生,但我無法弄清楚。

謝謝!

+1

這不是一個錯誤打字稿,這僅僅是JavaScript的 –

+0

任何想法,爲什麼我得到這個錯誤?由於 –

+0

[一切似乎工作(https://www.typescriptlang.org/play/index.html#src=var%20result%20%3D%20%5B%7Btext%3A%20'foo'%7D% 2C%20%7Btext%3A%20'bar '%7D%5D%3B%0D%0Aconsole.log(結果)%3B%20%2F%2F%20outputs%20%5B%7Btext%3A%20'foo' %7D%2C%20%7Btext%3A%20'bar'%7D%5D%0D%0Afor(讓%20item%20of%20result)%7B%0D 0A%%20%20%20%20console.log(項目的.text)%3B%20%2F%2F%20error%20can't%20read%20text%20of%20undefined%0D 0A%%20%20%20%20console.log(項目)%3B%20%2F%2F %20HOWEVER ...%20this%20works ...%20%3A%2F%0D 0A%%7D)如預期。你確定'response'確實是在評論中嗎? – martin

回答

1

這不是你如何遍歷數組。你應該用一個完整的for循環或forEach功能:

for(let i = 0, l = result.length; i < l; i++) { 
    console.log(result[i].text); 
} 

result.forEach((item) => { 
    console.log(item); 
}); 
+2

他環路的版本工作完全正常了打字稿操場(它被transpiled你的第一個例子是這樣),但是+1的'forEach'。 – rinukkusu

+0

謝謝,我會試試看。儘管它在操場上運行良好,但它必須與REST服務的結果有關。可能與回覆承諾和迭代之前他們真正得到完整的迴應,但不知道。我是新來的TypeScript,所以不知道如何調試。 –

+1

這條規則適用於使用'for ... in','for ... of'與集合一起工作 – martin

2

你最有可能有畸形的陣列。下面是一個說明問題的例子:

// Malformed array 
const result = [ 
    {text: 'foo'}, 
    {text: 'bar'}, 
] 
result.length = 3; 

// Your code 
console.log(result); // outputs [{text: 'foo'}, {text: 'bar'}] 
for(let item of result){ 
    console.log(item.text); // error can't read text of undefined 
    console.log(item); // HOWEVER... this works... :/ 
} 

修復

  • 過濾掉空項。

更多提示

  • 的console.log將打印不合理的東西,一個空行。你可能不會看到在您的調試
  • 閱讀上的JavaScript陣列孔
  • 享受生活