我面临着一个错误'未经处理的承诺拒绝'当我运行此代码:'
app.get('/standings/:tableId', async (req, res) => {
const tableId = req.params.tableId
const tableAddress = tables.filter(table => table.id == tableId)[0].address
const team_ID = tables.filter(table => table.id == tableId) [0].id
const results = [];
try {
const result = await request.get(tableAddress);
const $ = cheerio.load(result);
$('#league-tables-wrapper > div > div.table-wrapper > table > tbody > tr').each((index, element) => {
const tds = $(element).find("td");
const rank = $(tds[0]).text();
const team = $(tds[2]).text();
const points = $(tds[10]).text();
const tableRow = { rank, team, points };
results.push({
rank,
team,
points
});
});
} catch (error) {
res.json(error);
}
res.json(results)
});
'
该错误指出,“无法从该列表中读取未定义的属性地址”:'
const tables = [
{
address: 'https://****/****/superliga',
id: 'Albania',
league: 'superliga'
},
{
address: 'https://****/****/ligue-1',
id: 'Algeria',
league: 'ligue 1'
},
'错误的恢复是:此错误源于在没有catch块的异步函数内部抛出,或者拒绝未使用.catch()处理的承诺但我已经有catch语句。
任何人可以告诉我什么是这问题与我的代码.我正在使用express,cheerio和request-promise
1条答案
按热度按时间ivqmmu1c1#
不过,我可以看到您的代码存在一些问题,以准确回答您的问题:你的
try ... catch
在那个上下文中是无用的。你实际上需要写的是:如果你想你的异步错误被正确捕获。
还可以尝试对Id
tables.filter(table => table.id === tableId)[0].address
执行三重等式,并检查tableId
是否与表Ids的格式相对应,因为在这种情况下,过滤器只返回一个空数组。