Захват ошибок с помощью Async / Await - PullRequest
4 голосов
/ 25 сентября 2019

У меня есть часть моего кода, которая выполняет несколько вызовов API для разных конечных точек, и я хочу знать, если какой-либо из этих вызовов завершится неудачно, чтобы я мог отобразить соответствующее сообщение об ошибке.Прямо сейчас, если ошибка произойдет в one(), это остановит все остальные вызовы, но это не то, чего я хочу;Если возникает ошибка, я хочу, чтобы она заполнила объект errors и программа продолжила работу.

async function gatherData() {
    let errors = { one: null, two: null, three: null };

    const responseOne = await one(errors);
    const responseTwo = await two(errors);
    const responseThree = await three(errors);

    if (!_.isNil(errors.one) || !_.isNil(errors.two) || !_.isNil(errors.three)) {
        // an error exists, do something with it
    } else {
        // data is good, do things with responses
    }
}

gatherData();

async function one(errors) {
    await axios
        .get("https://jsonplaceholder.typicode.com/comment")
        .then(res => {
            return res;
        })
        .catch(err => {
            errors.one = err;
            return err;
    });
}

async function two(errors) {
    await axios
        .get("https://jsonplaceholder.typicode.com/comments")
        .then(res => {
            return res;
        })
        .catch(err => {
            errors.two = err;
            return err;
    });
}

async function three(errors) {
    await axios
        .get("https://jsonplaceholder.typicode.com/comments")
        .then(res => {
            return res;
        })
        .catch(err => {
            errors.three = err;
            return err;
        });
}

1 Ответ

1 голос
/ 25 сентября 2019

Если вы передаете errors в функции async, то передайте объект errors в качестве параметра

const responseOne = await one(errors);
const responseTwo = await two(errors);
const responseThree = await three(errors);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...