Добрый день, изучаю асинхронное программирование, да пока на данный момент нету четкого представления, но я работаю на ситуацией.
Суть проблемы заключается в том, что мне нужно расспечать массив "newsFeed" по завершению всего цикла методов.
Концепция идеи: имеется входной массив со ссылками на RSS ленты разных источников, асинхронная функция получает массив, парсит все это дело и добавляет во выходной массив 'newsFeed' и по окончанию операции нужно распечатать итоговое состояние массива "newsFeed"
Вот с последним пунктом проблема...
const axios = require('axios')
const xml2js = require('xml2js')
const parser = new xml2js.Parser()
const NULL = 0
const SECOND = 2
// Ну концепция данной идеи заключается в том, что если появляется новый канал, то мы его просто добавляем во входной массив,
let rssChannels = [
'https://mos.ru/rss',
'https://lenta.ru/rss/news',
]
// Итоговый, агрегационный массив с новостями со всех полученных источников из входного массива rssChannels
let newsFeed = []
const delay = () => {
return new Promise(resolve => setTimeout(resolve, 300))
}
// Подключение к RSS ленте, получаем XML и приобразуем из него в JS объекты, затем добавляем в агрегационный массив newsFeed
const getChannelFeed = async (url) => {
await delay()
axios.get(url)
.then(res => parser.parseStringPromise(res.data)
.then(res => newsFeed.push(res.rss.channel[NULL].item))
.catch(err => console.log('ERROR: Unable to parse received XML'))
).catch(err => console.log('ERROR: Unable to establish URL connection'))
}
const processArray = async (rssChannels) => {
const promises = rssChannels.map(getChannelFeed)
await Promise.all(promises)
console.log(newsFeed)
}
processArray(rssChannels)
Здесь можно запустить код