2017-04-26 91 views
0

尝试通过请求承诺执行请求,但它无法正常工作。request-promise返回undefined,但存在

请参阅下面的注释。

有人可以向我解释这个PiA吗?

在此先感谢

var todayOptions = { uri: `http://mlb.mlb.com/gdcross/components/game/mlb/year_${year}/month_${month}/day_${day}/master_scoreboard.json`, 
        simple: false, 
        resolveWithFullResponse: true 
}; 

rp(todayOptions) 
    .then(function (response){ 
    console.log(response.body); //RETURNS BODY 
    console.log(response.body.data); //RETURNS UNDEFINED EVEN THOUGH IT EXISTS 
}) 
    .catch(function(error){ 
    console.log(error); 
    }); 
+0

假设你的数据看起来像这样http://mlb.mlb.com/gdcross/components/game/mlb/year_2015/month_03 /day_28/master_scoreboard.json,那么你可能需要先用JSON解析它.parse – sesamechicken

回答

1

我敢打赌response.body是一个字符串化JSON对象。尝试解析它。 request-promise有时会返回一个字符串化的对象。

console.log(JSON.parse(response.body).data);

+0

你先生,是我今天的个人英雄。 对于总是使用request-promise的JSON.parse来说是否公平? 我想刚才的JavaScript支持请求+的forEach开箱:( – Kyriediculous

2

您需要设置json选项设置为true:

var todayOptions = { uri: `http://mlb.mlb.com/gdcross/components/game/mlb/year_${year}/month_${month}/day_${day}/master_scoreboard.json`, 
        simple: false, 
        resolveWithFullResponse: true, 
        json: true 
}; 
+0

工作为好,完全忘了这个选项 在请求承诺文档从未有提及,但使用请求时,我总是用它。 在事实上,我总是使用请求,但我现在必须为每个请求提供最终的承诺,我讨厌承诺 – Kyriediculous

+0

我还没有意识到这个选项。 –