问题:我正试图找出一种方法,只有在将多个文件传递给fstream.Reader时才会触发一个'end'事件。
平台:节点0.6.21
有没有更好的方法来解决这个问题?
var r = fstream.Reader({
path: source, // source is a directory with two files.
type: 'File'
}).pipe(zlib.createGunzip()).pipe(tar.Extract({
strip: strip,
path: destination
}));
r.on('end', function() {
// this is firing everytime a file is extracted. Ideally, I would only fire one 'end' event.
if (typeof callback === 'function') {
return callback(null);
}
});
提取两个文件时的结果=两个'结束'回调。任何建议表示赞赏。感谢。
答案 0 :(得分:1)
您可以使用其他图书馆吗? Lodash#after或Underscore#after会有所帮助。
您可以执行类似
的操作// call `next` twice will call then call `callback`
var next = _.after(2, callback);
var r = fstream.Reader({
path: source, // source is a directory with two files.
type: 'File'
}).pipe(zlib.createGunzip()).pipe(tar.Extract({
strip: strip,
path: destination
}));
r.on('end', function() {
next();
});
或者,使用async
function read(p, next) {
var r = fstream.Reader({path: p}); // read code like above
r.on('end', next);
}
var tasks = [
read.bind(null, 'path/to/first/file'),
read.bind(null, 'path/to/second/file')
];
// callback will be called after all files do `end` .. only once
async.parallel(tasks, callback);
答案 1 :(得分:0)
原来这是节点0.6的已知问题。如果您遇到此问题,则需要避免使用流或升级节点。