等待node.js

时间:2017-08-13 20:48:57

标签: javascript node.js events while-loop request

我目前正在处理我的第一个node.js应用程序。它基本上是一个供给阅读器CLI,以满足我的特定需求。但我现在坚持使用它,我希望,你可以帮忙:)。

所以,我写了两个模块:第一个我处理rss feed,从中加载数据。第二个是解析器,用于读取我的文章并从html站点获取一些元数据。现在我必须让他们互相交流。

在第一个模块的函数中,我从XML的每个条目中读取数据,如下所示:



const FeedParser = require('feedparser'),
  Metas = require(__dirname + '/metas'),
  events = require('events');

var Feeds = function(file) {
  var entries = [];
}

Feeds.prototype = new events.EventEmitter();

Feeds.prototype.loadFeed = function(url) {
  var self = this;
  var fp = new FeedParser();
  var req = request({
    url: url
  });

  req.on('response', function(res) {
    var stream = this;
    if (res.statusCode === 200) stream.pipe(fp);
  });

  fp.on('readable', function() {
    var stream = this,
      item;
    while (item = stream.read()) {
      var metas = new Metas();
      metas.getDescription(item.link);
      metas.on('loaded', function(desc) {
        self.entries.push({
          title: item.title,
          description: desc,
          date: item.date,
          author: item.author,
          url: item.link
        });
      });
    }
  });

  fp.on('end', function(res) {
    self.emit('loaded', self.articles);
  });
}




在函数meta.getDescription()中,我基本上对网址执行了另一个请求,并使用cheerio解析数据,以从HTML字符串中获取og:descriptiondescription元数据。

问题是,我必须等待事件在循环中发出,但我已经知道这种方式不可能。那我怎么解决呢?任何想法?

0 个答案:

没有答案