【问题标题】:get the all feeds data in single array in node.js在 node.js 中的单个数组中获取所有提要数据
【发布时间】:2019-10-01 07:23:58
【问题描述】:

我对node js有一个疑问 我需要从 RSS 提要中获取数据 为此,我在其中安装了 rss-parser 模块 https://www.npmjs.com/package/rss-parser

让 Parser = require('rss-parser'); 让 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 详细信息

到目前为止我已经尝试过了

我试过这段代码

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:未处理的承诺拒绝(拒绝 id:1):TypeError:无法读取属性 未定义的“选项” (节点:5700)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

【问题讨论】:

  • 您自己是否已经尝试过?您可以为每个 URL 执行一个循环,在其中调用异步函数,然后使用 Array.prototype.push() 将结果添加到您的“单个数组”
  • 我把我试过的东西放进去
  • 我按照你的浓度试过了,但在收集所有提要数据之前它就返回了

标签: mysql node.js loops


【解决方案1】:

您可以使用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)
        });
    })
})();

【讨论】:

  • 现在我用我用你的代码试过的东西编辑了这个问题,但我点了这个错误
  • 为什么要使用两个循环我已经给了你两个选项,你可以选择任何不是两个,删除注释后的代码部分or use loop.....
  • 我看不到声明 some error 的问题您遇到了什么错误以及您尝试了什么?
  • 同样的错误再次出现没有运气,我使用了 rss-parser npm link
  • (node:5700) UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 1): TypeError: Cannot read property 'options' of undefined mysql node.js loops
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
相关资源
最近更新 更多