2017-03-19 6 views
1

ノードjsには、別の要素を満たすためにアレイをトラフで反復する関数があります。いくつかのproprertiesは未定義です、どのようにすることができますか?たとえば、私は "未定義のプロパティformattedPriceを読むことができません"を取得します。ノードのforループで何が問題になっていますか?ノードを持つループのアンダーシュート

for (var i = 0; i < 10; i++) { 
    //console.log(JSON.stringify(item.SmallImage)); 
     message.attachment.payload.elements[i] = { 
      "title":items[i].ItemAttributes.Title, 
      "image_url": items[i].LargeImage.URL, 
      "subtitle":items[i].ItemAttributes.ListPrice.FormattedPrice, 
      "default_action": { 
      "type": "web_url", 
      "url": "https://www.google.it", 
      "messenger_extensions": true, 
      "webview_height_ratio": "tall", 
      "fallback_url": "https://www.google.it" 
      }, 
      "buttons":[ 
       { 
        "type":"web_url", 
        "url":"https://www.google.it", 
        "title":"View Website" 
       },{ 
        "type":"postback", 
        "title":"Start Chatting", 
        "payload":"DEVELOPER_DEFINED_PAYLOAD" 
       }    
      ]  
     } 
    //sendMessage(senderId, {text: item.ItemAttributes.Title+" PREZZO**:"+item.ItemAttributes.ListPrice.FormattedPrice}); 
    } 
+1

あなたの問題は別の場所です。 Javascriptの非同期性に悩まされている可能性は非常に高いです。 'items'がどのように埋められているかを示してください。そうでなければ私たちはあなたを助けることはできません – Schlaus

+1

念のために設定され、それらの性質を持っていますが、彼らはそれがオブジェクトためのいくつかは、あなたの 'items'が提案を – Lev

答えて

1

cannot read property formattedPrice of undefinedあなたがformattedPrice、items[i].ItemAttributes.ListPriceにアクセスしようとしていた、そこからオブジェクトは、未定義/ nullであることを意味します。発生からそのエラーを防止するために

、あなたはmessage.attachment.payload.elements[i]に値を割り当てる前に、いくつかの検証を含める必要があります。考慮すべき

for (var i = 0; i < 10; i++) { 
    var subtitle = "N/A"; 
    if (items[i].ItemAttributes.ListPrice == null) { 
     subtitle = items[i].ItemAttributes.ListPrice.FormattedPrice; 
    } 
    message.attachment.payload.elements[i] = { 
     ... 
     "subtitle": subtitle, // will now show as "N/A" instead of causing program to crash 
     ... 
    }; 
} 

もう一つは、あなたが項目のリストは、常に10個の以上の要素が含まれています確信している場合を除き、ループのため、代わりにi < 10などの条件を持つのでは、i < items.lengthに置き換えることです。

+0

おかげundefinied''ですが、問題は非同期で何かである 'item.ItemAttributes.ListPrice'を持っていることを知らせるていますまだ割り当てられていないように定義されていないことがあります –

+0

@Pjotr​​Raskolnikov質問を更新して、非同期を使用する場所/方法を含めることができますか? –

関連する問題