Кажется, что мое Обещание одновременно возвращает истину и ложь. Консоль возвращает «undefined», а затем прямо под ним возвращает «что-то пошло не так». Данные возвращаются под ними, показывая, что на самом деле он не ожидает выполнения обещания.
Вот вызываемая функция:
module.exports = (url) => {
return new Promise((resolve, reject) => {
axios({
method: 'get',
url: url
})
.then(response => {
const html = response.data
const $ = cheerio.load(html)
const songtable = $('.chart-list__elements > li')
const topsongs = []
songtable.each(function () {
const rank = $(this).find('.chart-element__rank__number').text()
if (rank == 11) return false;
const name = $(this).find('.chart-element__information__song').text()
const artist = $(this).find('.chart-element__information__artist').text()
topsongs.push({
rank,
name,
artist
})
})
resolve()
return topsongs;
})
.catch(reject("something went wrong"))
})
}
От вызывающего:
componentDidMount() {
const top_songs = topsongs('https://www.billboard.com/charts/hot-100')
.then(console.log(top_songs))
.catch(err => console.log(err))
}
Спасибо, я новичок в Promises и пробовал почти все способы сделать это. Причина того, что у меня есть Promise, несмотря на вызов asyn c ax ios (), заключается в том, что он не выполнялся асинхронно и возвращал неопределенные данные.