如何在Node.js中处理大量的文件和stream?

我正在开发一个小型的节点项目,需要复制和解压各种大小的文件。 我一直在尝试使用async.eachSeries来照顾它​​,但它不工作。 这些文件是被创build的,但是wr的pipe道最终会写入多个不同的文件,而不pipe它将以哪个文件结束。

fs.readdir(path, function (err, files) { async.eachSeries(files, function (file, callback) { var wr = fs.createWriteStream(file); fs.stat(file, function (err, stats) { if (err) throw err; var stream = fs.createReadStream(file).on('end', function () { callback(); }).pipe(ungzip).pipe(wr); }); }, function () { //res.write(concatenated); //res.end(); }); }); 

我还是新的节点,所以任何帮助,将不胜感激。

-NQ

看起来解决scheme是使用闭包。

在你的代码中的问题是,传递给fs.stat的callback函数引用了外部作用域的一个variables,即wr,它在循环的下一次迭代中被改变。 closures是很好的整理出来的。

 fs.readdir(path, function (err, files) { async.eachSeries(files, function (file, callback) { var wr = fs.createWriteStream(file); fs.stat(file, function(myWr){ return function (err, stats) { if (err) throw err; var stream = fs.createReadStream(file).on('end', function () { callback(); }).pipe(ungzip).pipe(myWr); } }(wr)); }, function () { //res.write(concatenated); //res.end();} }); }); 

请参考请解释在循环中使用JavaScript闭包和服务一批dynamic页面的更多closures。