2
我使用Node.js的请求库节点feedparser沿着以捕获进料和它的文章到使用猫鼬MongoDB数据库。Node.js的流完成
我存储的信息后进入岗位收集和成饲料收集馈送信息,但我需要存储在饲料集合称为feeds._post阵列内的post._id。
我遇到的问题是使用流接口,feedparser.on('end')在所有feedparser.on('可读')对数据库的异步调用完成之前调用,因此我最终说,收集后在15个职位,只有11 post._id年代Feed._post阵列英寸我知道如果这只是普通的JavaScript,我可以使用async来确保.on('end')等待所有.on('可读')的完成,但是我怎么去关于这与流?
在此先感谢。
db.Feed.findById(feedid, function(error, feed) {
// request.on('response') -> this.pipe(feedparser)
feedparser.on('readable', function() {
var post;
while (null !== (post = this.read())) {
db.Post.create({ /* post details */ }, function(err, post) {
feed._post.push(post);
});
}
});
feedparser.on('end', function() {
feed.save();
});
});
我刚完成一个相同的解决方案,除了代替'函数结束()'我实现'feedparser.on(“saveComplete”)',然后内的'feedparser.on('可读')'我'如果(--postsSaving === 0 && parserEnded)feedparser.emit(' saveComplete')'。非常类似的解决方案,感谢您花时间回复。 – David
@大卫,使用“saveComplete”事件似乎好得多的解决方案给我 - 即使使用此需要注意使用不同的事件名称,以标明完成代码。耻辱我们无法控制被解雇的'已完成'事件。 – RichS