mongoose
과 함께 기사를 저장하는 데 사용하는 baconjs
스트림이 있습니다. 여기 코드는 다음과 같습니다 스트림이 onEnd
을 종료스트림 끝에서 nodej를 종료하는 방법 마지막 값이 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);
});
});
});
되면, 나는 DB 연결을 닫고 nodejs 프로그램을 종료합니다. 일단 스트림이 끝나면 최신 값이 db에 저장되도록 잠시 기다려야한다고 생각했습니다. 따라서 setTimeout
을 15 초 동안 사용하고 db.close
을 사용합니다.
문제는 로그 stream ended closing in 15 seconds..
이 표준 출력에서 50-60 번 기록된다는 것입니다. 이유는 무엇입니까? 그런 프로그램을 종료하는 좋은 접근 방법입니까?
입니다 FRP를 사용할 때 잘못된 코드의 표시. Roman Pominov의 대답에서'flatMap'과'fromNodeCallback'을 사용하는 것이 훨씬 낫습니다. – OlliM