我是一个JavaScript学习者。我有一个名为 downloadFakeImage.js
与下面的脚本。
const faker = require('faker');
const axios = require('axios');
const path = require('path');
const fs = require('fs');
const url = [];
// Generate 1000 fake url from faker
for (let i=0; i<1000; i++) {
url.push(faker.image.fashion());
}
// Download 1000 user photos to local image folder
for (let i=0; i<url.length; i++) {
// path for image storage
const imagePath = path.join(__dirname, './image', `${i}.jpg`);
axios({
method: 'get',
url: url[i],
responseType: 'stream'
})
.then((response) => {
response.data.pipe(fs.createWriteStream(imagePath));
});
}
这个脚本的目标是生成1000张假的时尚图片到一个名为 "Fake Fashion "的文件夹中。image
. 当我运行 node downloadFakeImage.js
在我的终端中,只有部分图片被保存到文件夹中。我的终端显示整个brunch的以下错误信息。
我想这可能与异步问题有关,谁能教我如何折射出我的脚本,使其发挥作用?
更新了一下,我把我的代码重构成了下面的样子。
我重构了我的代码,如下所示,我可以生成一些图片,但我仍然不能生成1000张图片。对于前300张图片,它运行正常,然后它失败了。
const faker = require('faker');
const axios = require('axios');
const path = require('path');
const fs = require('fs');
async function seedImage() {
const url = [];
// Generate 1000 fake url from faker
for (let i = 0; i < 1000; i++) {
url.push(faker.image.fashion());
}
// Download 1000 user photos to local image folder
for (let i = 0; i < url.length; i++) {
// path for image storage
const imagePath = await path.join(__dirname, './image', `${i}.jpg`);
axios({
method: 'get',
url: url[i],
responseType: 'stream'
})
.then((response) => {
response.data.pipe(fs.createWriteStream(imagePath));
})
.catch((error) => {
console.log(error);
});
}
}
seedImage();
你可以添加一个 catch 块来处理错误,如下所示。
const faker = require('faker');
const axios = require('axios');
const path = require('path');
const fs = require('fs');
const url = [];
// Generate 1000 fake url from faker
for (let i=0; i<1000; i++) {
url.push(faker.image.fashion());
}
// Download 1000 user photos to local image folder
for (let i=0; i<url.length; i++) {
// path for image storage
const imagePath = path.join(__dirname, './image', `${i}.jpg`);
axios({
method: 'get',
url: url[i],
responseType: 'stream'
})
.then((response) => {
response.data.pipe(fs.createWriteStream(imagePath));
})
.catch((error) => {
console.log(error);
});
}