Поток узла не завершен, но испускает конец

Я читаю это и написал свои коды на основе примеров.

Мои коды:

const through = require ('through2'); const bluebird = требуется ('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

Как это исправить? Спасибо

1 ответ

Решение

Вам нужно будет дождаться окончания целевого потока pipeВ настоящее время вы ожидаете только входной поток. использование

const res = stream.pipe(through({objectMode: true}, …));
return streamToPromise(res);
Другие вопросы по тегам