gpt4 book ai didi

node.js - 如何在 Node.js 中处理大量文件和流?

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:24 26 4
gpt4 key购买 nike

我正在开发一个小型 Node 项目,该项目需要复制和解压缩许多不同大小的文件。我一直在尝试使用 async.eachSeries 来处理它,但它没有成功。文件已创建,但输出 wr 的管道最终会写入多个不同的文件,无论它最终应写入哪个文件。

     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();
});
});

我还是 Node 新手,因此我们将不胜感激。

-NQ

最佳答案

看起来解决方案是使用闭包。

代码中的问题是传递给 fs.stat 的回调函数引用了外部作用域中的变量,即 wr,该变量在循环的下一次迭代中发生更改。闭包很好地解决了这个问题。

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();}
});
});

引用Please explain the use of JavaScript closures in loopsServing A Batch Of Dynamic Pages有关关闭的更多信息。

关于node.js - 如何在 Node.js 中处理大量文件和流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18776038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com