代码说明:
在第一个 .then()中,我获取了10张图像的数据。 然后使用 for of 循环,遍历每个单独的图像。在下一行中,我正在生成另一条路径来将图像保存到$ {count}。
现在是主要部分
我正在使用 axios 通过传递 image.url 来获取图像。在 .then()中,我得到了响应,并将其传递到预先生成的路径。
解决是否获取数据并增加计数以在下一次迭代中更改路径。拒绝出现任何错误
我正在执行 console.log(count ++),以检查是否要遍历所有10张图像,并得到“ 1 2 .... 10”输出,这意味着一切都在工作正常。
问题:根据代码,应将10张图像保存在 images 文件夹中,其名称为'image1,image2 ... image10' 。但是我只得到第一张图片。我究竟做错了什么?是否应该在for循环中将内容写入磁盘?
client.search('Steve Angello')
.then(images => {
let count = 1;
for(image of images){
const path1 = path.resolve(__dirname, 'images', `image ${count}.jpg`);
axios({
method: 'GET',
url: image.url,
responseType: 'stream'
})
.then((response) => {
response.data.pipe(fs.createWriteStream(path1));
return new Promise( (resolve, reject) => {
response.data.on('end', () => {
resolve();
console.log(count++);
})
response.data.on('error', (error) => {
reject(error);
})
})
})
.catch((err) => console.log(err));
}
});
答案 0 :(得分:3)
所有图像都被保存到名为“ image 1.jpg”的文件中(10次)。您可以通过在调用axios之前添加console.log来确认这一点。
我认为最简单的解决方案是更改您的循环
for(image of images){
const path1 = path.resolve(__dirname, 'images', `image ${count}.jpg`);
到
for (count = 0; count < images.length; count++) {
image = images[i];
const path1 = path.resolve(__dirname, 'images', `image ${count+1}.jpg`);
// and any other references to count should be removed