я с небольшой проблемой при использовании async.queue с FileStreamочередь Асинхронный, FileStream конец как знать, когда оба закончили
- У меня есть сценарий, где мой FileStream завершит
- я поставил FILEREAD в правда
- однако очередь будет пустой и уже называют стоком
- это приводит тогда мое «сделано», чтобы никогда не называли
Каков правильный способ сказать «закончить очередь» после того, как мой поток «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;
})
);
или есть более эффективное использование асинхронных, который позволит мне это сделать? асинхронной технологическая линия по линии с возможностью выхода в начале, если одна из линий имеет ошибки
Вы можете просто добавить другую задачу сразу же после того, как вы установили 'fileRead' в значение true. Я думаю, ваша проблема в том, что функция 'task', которую вы вызываете с каждым элементом очереди, вызывается и завершается до того, как событие' end' вызывается в вашем потоке. – forrestmid