我正在尝试从解析中移动下载图像并将其保存到我的本地。我有这段代码可以帮我完成工作。当只有一个请求时,这种方法很有效,但是当我放入一个循环时,它并不能保持良好状态。
`for(var i = 0; i < 5; i++) {
console.log(i);//to debug
var filename = results_jsonObj[i].imageFile.name;
var uri = results_jsonObj[i].imageFile.url;
request.head(uri, function(err, res, body){
if (err){
console.log(err);
console.log(item);
return;
}else {
console.log(i); //to debug
var stream = request(uri);
stream.pipe(
fs.createWriteStream("images/"+filename)
.on('error', function(err){
callback(error, filename);
stream.read();
})
)
}
});
}`
无论我有什么循环条件,只有一个图像下载到上述目录。
以下是操作
输入来自Json文件,我有节点js程序中包含的请求,fs,parse模块。
有关如何解决此问题的任何帮助?
答案 0 :(得分:1)
我现在已经修好了。正如评论中所建议的那样,异步帮助我做了这个伎俩。
for(var i = 0; i < 900; i++) {
async.forEachOf(results_jsonObj[i], function(value, key, callback){
var image = {};
image.key = key;
image.value = value;
if(image.key == 'imageFile')
{
var filename = image.value.name;
var uri = image.value.url;
// console.log(filename, uri);
}
request.head(uri, function(err, res, body){
if (err){
console.log(err);
// console.log(item);
return;
}else {
// console.log(i,res.headers['content-type']); //to debug
var stream = request(uri);
stream.pipe(
fs.createWriteStream("images/"+filename)
.on('error', function(err){
callback(error, filename);
stream.read();
})
)
}
});
callback();
}, function(err){
if (err) {
console.log('one of the api failed, the whole thing will fail now');
}
});
}