У меня есть поток baconjs
, который я использую для сохранения статей с помощью mongoose
. Вот код:Как выйти из nodejs в конце потока, поэтому последние значения сохраняются в db и правильно регистрируются
function main() {
db.once('open', function(callback) {
console.log('db connection successs');
console.log('stremaing page ' + page);
var stream = readSite(page);
stream.onValue(function(article) {
try {
article = toArticleModel(article);
} catch (e) {
console.error(e);
}
article.save(function(err, article) {
if (err) {
console.error('Save Error: ' + err);
} else {
console.log('saved ' + article.publishedDate + " " + article.author.name + " " + article.title);
}
});
stream.onError(function(err) {
console.error('Stream Error: ' + err);
});
stream.onEnd(function() {
console.log('stream ended closing in 15 seconds..');
setTimeout(function() {
db.close();
}, 15 * 1000);
});
});
});
После того, как поток заканчивается onEnd
, я хочу, чтобы закрыть соединение с базой данных и выхода из программы nodejs. Я понял, как только поток закончится, я должен подождать некоторое время, чтобы последние значения были сохранены в db. Поэтому я использую setTimeout
в течение 15 секунд и использую db.close
.
Проблема в том, что журнал stream ended closing in 15 seconds..
зарегистрирован 50-60 раз в стандартном режиме, почему? И это хороший подход к выходу из такой программы?
Использование изменяемых состояний (переменные 'savingArticles',' streamEnded') является признак плохого кода при использовании FRP. Использование 'flatMap' и' fromNodeCallback' в ответе Романа Поминова намного лучше. – OlliM