【问题标题】:node stream not finish but emit end节点流未完成但发出结束
【发布时间】:2018-05-19 14:28:38
【问题描述】:

我正在阅读 this 并根据示例编写代码。

我的代码:

const through = require('through2'); const bluebird = require('bluebird');

function streamToPromise(stream) {
  return new Promise(function(resolve, reject) {
    stream.resume();
    stream.on("end", resolve);
    stream.on("error", reject);
  });
};

module.exports = {
  up: function up() {
    console.log('startstream');
    // Doc is sequelize Model
    const stream = Doc.createReadStream({
      include: [
        {
          repository: AssociatedRepo,
          as: 'on',
          required: false,
        },
      ],
    });

    stream.pipe(through({ objectMode: true }, (doc, enc, cb) => {
      console.log('docid', doc.id);
      return doc.destroy()
        .then(() => cb());
    }));
    return streamToPromise(stream).then((data) => {
      console.log('xxxxxxxxxx', data);
      return null;
    });
  },
};

我尝试使用上述程序读取和删除大约 400 条记录。但从日志中,我发现流承诺 (streamToPromise(stream)) 已解决,但仍有几条记录。从日志中,我得到:

xxxxxxxxxx undefined
docid 89934915596

如何解决这个问题?谢谢

【问题讨论】:

    标签: node.js promise node-streams through2


    【解决方案1】:

    您需要等待pipe 的目标流结束,目前您只等待输入流。使用

    const res = stream.pipe(through({objectMode: true}, …));
    return streamToPromise(res);
    

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 2014-06-06
      • 2018-05-07
      • 1970-01-01
      • 2020-07-30
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多