получить данные всех каналов в одном массиве в node.js - PullRequest
0 голосов
/ 01 октября 2019

У меня есть одно сомнение в узле js. Мне нужно получить данные из RSS-канала, для этого я установил в него модуль rss-parser https://www.npmjs.com/package/rss-parser

let Parser = require ('rss-parser«);let parser = new Parser ();

(async () => {

  let feed = await parser.parseURL('https://www.reddit.com/.rss');
  console.log(feed.title);

  feed.items.forEach(item => {
    console.log(item.title + ':' + item.link)
  });

})();

код был такой, что здесь они используют асинхронную функцию, чтобы получить фид данных для одного URL, у меня есть много URL, мне нужно зациклить его и получитьподробности о фиде в одном массиве есть ли возможность, скажите, пожалуйста, есть ли что-то, что мне нужно, чтобы получить все детали URL фида в одном массиве

На данный момент я пробовал

код

exports.getRssFeedLinks = () => {
    // Setting URL and headers for request

    // Return new promise 
    return new Promise((fulfill, reject) => {
        // Do async job
        let getSql = 'SELECT * FROM `news_feeds`';
        //console.log(updateSql);
        connection.query(getSql, (error, results, fileds) => {
            if(error) {
                reject(error);
            }
            else {
                returnResult = JSON.stringify(results);
                fulfill(returnResult);
            }
        });
    })
}

exports.errHandler = function(err) {
    console.log(err.message);
}

exports.getRssFeeds = (req, res) => {
    let parser = new Parser();
    let feedLink;

    var dataPromise = this.getRssFeedLinks();
    //console.log(dataPromise);
    dataPromise.then(JSON.parse, this.errHandler)
    .then(function(newFeeds) {
        // Do one more async operation here
        let feedsList = []; 
        if(newFeeds && newFeeds.length > 0)  {
            let feedLinks = [];
            newFeeds.forEach(feed => {
              feedLinks.push(feed.link);  
            });
            (async () => {
                let feeds = await Promise.all(feedLinks.map(parser.parseURL));
                //feeds will have array of arrays, each array includes the response feed from each url

                feeds = [].concat(...feeds) //if you want to flatten the array
                feed.forEach(({item}) => {
                    console.log(item.title + ':' + item.link)
                });

                feeds.forEach(feed => {
                    console.log(feed.title);

                    feed.items.forEach(item => {
                        console.log(item.title + ':' + item.link)
                    });
                })
            })();
               } 

            if(feedsList.length >0) {                
                res.send({
                    "success" : true,
                    "result" : feedsList
                });
            }
            else {
                res.send({
                    "success" : true,
                    "message" : "No Record ",
                    "result" : feedsList
                });
            }


    }, this.errHandler);   


}

Ошибки (узел: 5700) UnhandledPromiseRejectionWarning: необработанное отклонение обещания (идентификатор отклонения: 1): TypeError: Невозможно прочитать свойство 'options' undefined (node: 5700) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания не рекомендуется. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом выхода.

1 Ответ

0 голосов
/ 01 октября 2019

Вы можете использовать Promise.all для отправки нескольких запросов.

(async () => {
    let feeds = await Promise.all(['https://www.reddit.com/.rss1', 'https://www.reddit.com/.rss2'].map(parser.parseURL));
    //feeds will have array of arrays, each array includes the response feed from each url

    feeds = [].concat(...feeds) //if you want to flatten the array
    feed.forEach(({item}) => {
        console.log(item.title + ':' + item.link)
    });

    //or use loop through each feed

    feeds.forEach(feed => {
        console.log(feed.title);

        feed.items.forEach(item => {
            console.log(item.title + ':' + item.link)
        });
    })
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...