gpt4 book ai didi

javascript - Nodejs 在使用循环下载许多文件时丢失数据

转载 作者:搜寻专家 更新时间:2023-11-01 00:11:15 24 4
gpt4 key购买 nike

今天,我尝试从我的服务器下载很多文件

下载.js

function getPhotos(req, res) {
//Get User Photos
var fileReader = fs.readFile('./../data/user.json', 'utf8', function(err, data) {
if (err)
console.log(err);
else {
var dataJson = JSON.parse(data);
//console.log(dataJson.Person);
for (var i = 0; i < dataJson.Person.length; i++) {
var options = {
host : '10.16.47.128', // Local Server IPAddress
port : 2013, //Port
path : '/ExternalServer/avatar/' + dataJson.Person[i].Username + '.jpg',
};
//console.log(dataJson.Person[i].Username);
var fileAvatarPhotos = fs.createWriteStream('./../avatar/' + dataJson.Person[i].Username + '.jpg');
fs.exists(fileAvatarPhotos, function(exists) {//Check Exist File
if (exists) {
var req = http.get(options, function(res) {
//console.log(res);
res.pipe(fileAvatarPhotos);
});
} else {
var req = http.get(options, function(res) {
fs.writeFile(fileAvatarPhotos, '', function(err) {
if (err)
return console.log(err);
var req = http.get(options, function(res) {
//console.log(res);
res.pipe(fileAvatarPhotos);
});
});
});
}
});
}
}
});
//End Get User Photos
}

当我运行代码时:

node download.js

系统下载了所有照片,但照片大小为 0kb。并有错误:

stream.js:81 throw er; // Unhandled stream error in pipe. ^ Error: OK, close

此外,当我抛出循环时 (例如:修复 dataJson.Person[i].Username,将 i 更改为 10)

运行代码后,系统返回正确的照片。

发生了什么?如何解决?

最好的问候.!

最佳答案

在 for 循环中实现这样的功能不是一个好主意。那是因为循环内部有异步操作,但循环的每次迭代都会立即执行。在您的情况下,您正在定义 fileAvatarPhotos,这是一个 WriteStream 对象。 http.get 方法是异步的,因此在其回调中,您可以使用为循环的第三次迭代、第四次或第一次迭代定义的 fileAvatarPhotos。这取决于。您可以尝试将您的代码转换为如下形式:

var files = ["file1.jpg", "file2.jpg", "file3.jpg"];
var readFile = function(callback) {
if(files.length > 0) {
var file = files.shift();
http.get({path: file}, function(res) {
// ... process the result
readFile(callback);
})
} else {
callback();
}
}
readFile(function() {
console.log("reading finishes");
});

readFile 被一次又一次地调用,直到 files 数组中没有更多元素。

关于javascript - Nodejs 在使用循环下载许多文件时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18310990/

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