과 sequelize을 공부 중입니다.promise가 transformFunction 내에서 해결되었는지 확인하십시오
내 코드 :
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
이 삭제되기 전에 코드가 이미 실행을 마칩니다.
문제를 해결하는 방법은 무엇입니까? 감사합니다
나는
it('should be found by readstream', function _testStream(){
/* wrap the first piece of codes here*/
});
처럼 mocha
테스트 코드의 위 부분을 포장하지만 스트림이 읽기 완료하기 전에, 테스트가 존재한다.
하지만 지금은''기다릴 ''을 사용할 수 없다. – BAE
첫 번째 해결책을 시도했지만, 스트림이 읽기를 끝내기 전에 테스트가 존재했다. 문제는 전체 약속 체인이 비동기 적이라는 것입니다. – BAE
아 맞습니다. 비동기 테스트의 끝을 나타 내기 위해 모카와 스트림에서'done'을 사용해야합니다. – Matt