【发布时间】:2021-07-07 01:59:27
【问题描述】:
在处理数据之前,我需要等待一系列 axios 调用(在 for 循环中)完成。所以我将它们添加为一系列承诺,然后使用 Promise.all()
static myFunction(games) {
let promises = [];
games.forEach(game => {
promises.push(this.getData(game));
});
Promise.all(promises)
.then(gameData => {
console.log("???? promised:", gameData); //logging as [undefined, undefined, undefined]...
})
}
static getData(game) {
return axios({method: "get", url: urlStr})
.then(res => {
return parseHTMLData(res);
}
}
static parseHTMLData(response) {
return new Promise((resolve, reject) => {
const $ = cheerio.load(response.data);
const name = $(this).find('.team_name');
return resolve(name);
}
}
我已经确认我在 getData() 中成功取回了数据,但是在 Promise.all() 中它以“未定义”数组的形式返回(当我在上面的代码中记录 gameData 时)。
知道为什么我的 axios 承诺返回未定义吗?
更新:问题是我正在使用 Cheerio 抓取从 Axios 检索到的数据,我需要将 Cheerio 抓取的数据包装在 Promise 中。
【问题讨论】:
-
@jfriend00 我已经简化了我的问题中的示例,但在我的实际代码中,我最后返回了类似 {"team" : "Yankees", "city" : "New York"} 的内容获取数据。我成功地将它控制台记录在那里。但是在 Promise.all 中由于某种原因它显示为未定义
-
我无法复制。你能做一个minimal reproducible example的可运行代码吗?
-
您是否尝试过捕获错误响应
-
@akolliy 是的,但承诺没有错误 - 它交付了正确数量的对象,但它们未定义
-
@vikzilla,我试过这个code snippet,我觉得一切都很好......
标签: node.js promise axios cheerio