访问Faker图片时出现UnhandledPromiseRejectionWarning错误?

问题描述 投票:1回答:1

我是一个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();
javascript reactjs es6-promise faker
1个回答
0
投票

你可以添加一个 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);
        });
}
© www.soinside.com 2019 - 2024. All rights reserved.