我目前正在处理我的第一个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:description
或description
元数据。
问题是,我必须等待事件在循环中发出,但我已经知道这种方式不可能。那我怎么解决呢?任何想法?