2017-12-05 4 views
0

私はthisを読んでおり、例に基づいてコードを書いています。ノードストリームが終了しません終了

マイコード:=スルー

CONSTは( '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 

これを修正するには?ありがとう

答えて

0

pipeの宛先ストリームの終わりまで待つ必要があります。現在、入力ストリームを待っているだけです。用途

const res = stream.pipe(through({objectMode: true}, …)); 
return streamToPromise(res); 
関連する問題