Убедитесь, что обещание разрешено внутри transformFunction

Я учусь через 2 и продолжаю.

Мои коды:

  return Doc.createReadStream({
    where: { /*...*/ },
    include: [
      {
        /*...*/
      },
    ],
  })
  .pipe(through({ objectMode: true }, (doc, enc, cb) => {
    Comment.findOne(null, { where: { onId: doc.id } }).then((com) => { /* sequelize: findOne*/
      com.destroy(); /* sequelize instance destroy: http://docs.sequelizejs.com/manual/tutorial/instances.html#destroying-deleting-persistent-instances */
      cb();
    });
  }))
  .on('finish', () => {
    console.log('FINISHED');
  })
  .on('error', err => console.log('ERR', err));

Я пытаюсь четко выразить свой вопрос. Doc а также Comment являются моделями. Я хочу использовать поток для чтения экземпляров Doc из базы данных по одному и удаления комментариев к каждому экземпляру Doc. Comment.findOne а также com.destroy() оба вернут обещания. Я хочу, чтобы обещания были выполнены для каждого doc а затем позвоните cb(), Но мои выше коды не могут работать, прежде чем com быть уничтожены, коды уже заканчивают работать.

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

Я завернуть вышеупомянутый кусок кодов в mocha тест, как

it('should be found by readstream', function _testStream(){
  /* wrap the first piece of codes here*/
});

Но до того как поток завершит чтение, тест существует.

1 ответ

Решение

Вы можете подождать другое обещание, вернув обещание и используя другое .then,

Вам может понадобиться проверить наличие com результат быть null как хорошо, прежде чем бежать .destroy(),

  .pipe(through({ objectMode: true }, (doc, enc, cb) => {
    Comment.findOne(null, { where: { onId: doc.id } })
      .then(com => com.destroy())
      .then(()=> cb())
      .catch(cb)
  }))

Затем при запуске теста в mocha вам нужно дождаться асинхронного потока, добавив done к тестовой функции подписи и вызова done() по завершении или по ошибке.

it('should be found by readstream', function _testStream(done){
  ...
  .on('finish', () => done())
  .on('error', done)
})
Другие вопросы по тегам