如何在流的末尾退出nodejs,因此最后的值将保存到db中,并正确记录

用户名

我有一个baconjs用于保存的信息mongoose这是代码:

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程序。我认为一旦流结束,我应该等待一段时间,以便将最新值保存到数据库。所以我用setTimeout了15秒钟再使用db.close

问题是,日志stream ended closing in 15 seconds..在标准输出中记录了50-60次,为什么?这是退出此类程序的好方法吗?

爆炸药

要添加的stream.onEnd监听器里面stream.onValue这意味着您将在每次onValue触发时添加侦听器您需要将事件侦听器添加到其他事件侦听器之外,以便仅将它们添加一次。

有多种方法可以处理异步迭代,以确保在关闭数据库之前保存了所有项目值(实际上,跳过该步骤实际上可以使您摆脱这一步)。

// initialize savingArticles to 0

savingArticles++;
article.save(function (err, article) {
  savingArticles--
  if (streamEnded && !savingArticles)
    db.close();

stream.onEnd(function () {
  if (!savingArticles)
    db.close();
  else
    streamEnded = true;

如果当前未保存文章且流已结束,则这将关闭数据库。如果流在当前正在保存文章的同时结束,则应在保存该文章后关闭数据库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将参考值保存到NetSuite中的另一个记录

将值保存到oracle db中的变量中

如何将多维数组的值正确保存到数组中?

如何使用Hibernate将枚举值保存到DB?

Swift:如何仅将新项目保存到 Realm DB 中并更新现有值

如何将所选记录保存到变量中?

如何将多个记录保存到数组中

如何将多个记录保存到csv文件中?

将生成的流保存到ArrayList中

将位图保存到流中

如何将数据从JSON保存到NodeJS中的变量

将数据保存到mongoDB时,如何在代码中获取_id值

如何根据数据框列中的不同值将所有记录保存到多个CSV文件中?

Delphi-使用流将记录保存到文件

如何将JTextArea中的值保存到JTable中?

尝试从 nodejs 将日期保存到 Mysql 时,日期值不正确

如何散列最后插入的id并设置为请求,然后保存到laravel中的db中?

如何将ParseInt()的String的值保存到数组中?

如何将Ajax调用值保存到变量中

如何将值保存到 C# 中的列表

如何将单选按钮值保存到 SQLtable 中

发布到闪亮的服务器后无法将记录保存到db中

绑定模型以将多个记录保存到表的正确方法

如何在将数据保存到txt文件之前删除最后4个字符

如何在失败时退出多行 shell 脚本,并将错误流记录到文件中?

如何在node.js中拦截命令的输出流并将其保存到变量?

如何将XML编码为base64,然后将其保存到流中?

如何在使用 django 按下 html 按钮时将布尔值保存到数据库中

如何将值保存到Edittext?