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