10
我使用async.queue与FILESTREAM时有轻微问题异步队列,文件流到底怎么知道什么时候都完成
- 我遇到的情况,我的FILESTREAM将完成
- 我设置FILEREAD到真正
- 但是队列将是空的,已经被称为漏
- 这进而导致我的“做”永远不会被称为
在我的文件流是“结束”并且队列为空之后,说“结束队列”的正确方法是什么?
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