2016-07-07 6 views
1

いくつかのRESTサービスで匿名コールバック関数を設定しているとき、私は単純にconsole.logのRESTサービスの結果を得ると予想されるペイロード(オブジェクトの配列)。私は同じ配列をループを実行し、いくつかのキーの値を取得しようとすると、明らかに項目がundefinedループのTypeScriptの配列から未定義の項目

... 
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%7%3%20%7%3%20%5%3B%0%0A% %7D%2C%20D%0A%20D%0D%0D%5D%5D%0D%0A for(20%20%20%20%%20A%20%20%20% .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)。 '応答'が本当にコメントにあるのと同じですか? – martin

答えて

1

これは配列をどのように反復処理するかではありません。あなたは、ループまたはforEach機能のための完全なを使用する必要があります。

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

または

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

彼のバージョンのループは、TypeScriptのプレイグラウンドで完璧に機能します(最初の例に移行します)。 – 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の配列の穴にまで読む
  • デバッグ中
  • ことを見ていない可能性があります。これはtypescriptですエラーではありません人生
関連する問題