2017-12-05 6 views
0

Ich lese this und schrieb meine Codes anhand von Beispielen. Meine CodesKnotenstrom nicht fertig, aber emittieren Ende

:

const durch = 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; 
    }); 
    }, 
}; 

Ich habe versucht, das obige Programm zu verwenden, um etwa 400 Datensätze zu lesen und zu löschen. aber aus dem Protokoll habe ich festgestellt, dass der Stream-Versprechen (streamToPromise(stream)) gelöst wird, aber immer noch mehrere Datensätze übrig sind. Vom Protokoll erhielt ich:

xxxxxxxxxx undefined 
docid 89934915596 

Wie man das behebt? Danke

Antwort

0

Sie müssen auf das Ende des Zieldatenstroms der pipe warten, derzeit warten Sie nur auf den Eingangsstrom. Verwenden Sie

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