Реагируйте условно, чтобы проверить, есть ли в моих вызовах API ошибка - PullRequest
0 голосов
/ 06 марта 2020

Я хочу проверить, есть ли ошибка в одном из моих трех вызовов API, и если это так, прервать все из них. До сих пор мне удавалось только заставить функции проверять, запущены ли они, но я понимаю, что проверяю это только независимо от ошибок. Так я должен поставить условные в мои фактические функции вызова API, или я могу сделать это за рамками? Кстати, я поместил все три функции в одну функцию, так как все они запускаются вместе в асинхронном режиме c по нажатию кнопки. вот мой код.

async fetchData() {
    try {
        const res = await axios.get('api/.../...');
        this.setState({
            locationFull: res.data,
            sent: true
        });
    } catch (error) {
        this.setState({
            error,
            sent: false
        });
        console.log('Data not got');
    }
};


async sendData() {
    try {
        const res = await axios.post('api/.../...');
        this.setState({
            locationFull: res.data,
            sent: true
        });
    } catch (error) {
        this.setState({
            error,
            sent: false
        });
        console.log('data not sent');
    }
};


async updateData() {
    try {
        const res = await axios.put('api/.../...');
        this.setState({
            locationFull: res.data,
            sent: true
        });
    } catch (error) {
        this.setState({
            error,
            sent: false
        });
        console.log('data not updated');
    }
};

моя комбинированная функция, которая запускает все три

async combinedFunction() { 
await this.fetchData();
await this.sendData();
await this.updateData();
await this.sentCheck();
};

мое условное для проверки ошибок (что я знаю, это неправильно, но это то, что у меня есть до сих пор)

sentCheck() {
const fetched =  this.fetchData;
const updated=  this.updateData;
const sent =  this.sendData;
if (!fetched) {
    console.log('error in fetching');
} else if (!updated) {
    console.log('error in updating');   
} else if (!sent) {
    console.log('error in sent');   
}
};

Итак, еще раз, я хочу в конечном итоге отменить все вызовы, если один из трех вызовов вызовет ошибку (когда они обновляются и публикуются в разных конечных точках и коллекциях в серверной части).

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете использовать Promise.all(). Согласно документации MDN ,

Если какое-либо из переданных обещаний отклоняется, Promise.all асинхронно отклоняет значение отклоненного обещания, независимо от того, были ли другие обещания или нет. решили.

const fetchData = axios.get('api/.../...');
const sendData = axios.post('api/.../...');
const updateData = axios.put('api/.../...');

Promise.all([fetchData , sendData , updateData ]).then(function(values) {
  console.log(values);
});
...