У меня возникает небольшая проблема при использовании asyncqueue с файловым потоком
- У меня есть сценарий, в котором завершится мой фид
- Я установил fileRead в true
- однако очередь будет пустой и уже вызвала дренаж
- это приводит к тому, что мое "сделано" никогда не будет называться
Каков правильный способ сказать "закончить очередь" после того, как мой поток "end" и очередь пуста?
var fs = require('fs')
, util = require('util')
, stream = require('stream')
, es = require('event-stream');
var async = require('async');
var fileRead = false;
var lineNr = 0;
var q = async.queue(function(task, callback) {
task(function(err, lineData){
responseLines.push(lineData);
callback();
});
}, 5);
var q.drain = function() {
if(fileRead){
done(null, responseLines);
}
}
var s = fs.createReadStream('very-large-file.csv')
.pipe(es.split())
.pipe(es.mapSync(function(line){
s.pause();
q.push(async.apply(insertIntoDb, line))
s.resume();
})
.on('error', function(err){
done(err);
})
.on('end', function(){
fileRead = true;
})
);