如何在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。