Запрос на отправку нескольких запросов с использованием Axios - React - PullRequest
1 голос
/ 01 ноября 2019

Существует сценарий, когда мне нужно вызывать несколько сервисов одновременно, используя Axios, и мне нужно учитывать значения для успешных вызовов API и пренебрегать неудачными вызовами API. Например, см. Приведенный ниже случай:

let URL1 = "https://www.something.com"
let URL2 = "https://www.something1.com"
let URL3 = "https://www.something2.com"

const promise1 = axios.get(URL1);  // SUCCESS
const promise2 = axios.get(URL2);  // SAY THIS SERVICE CALL WAS FAILED SENDING 404 ERROR
const promise3 = axios.get(URL3);  // SUCCESS

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
}).catch((e)=>{ console.log("error",e)});

Допустим, что служба 2 завершилась сбоем, в то время как служба 1 и 3 успешно выполнена, в таком случае цепочка обещаний нарушается и выдает ошибку. Мне понадобится вывод в таком случае как [response_1 , null, response_3]. Можете ли вы указать мне, как этого добиться? Заранее спасибо.

1 Ответ

1 голос
/ 01 ноября 2019

Полагаю, вам следует реализовать его вручную , вернув Promise.resolve() on catch .

let URL1 = "https://www.something.com"
let URL2 = "https://www.something1.com"
let URL3 = "https://www.something2.com"

const promise1 = axios.get(URL1).catch(() => Promise.resolve());  // SUCCESS
const promise2 = axios.get(URL2).catch(() => Promise.resolve());  // SAY THIS SERVICE CALL WAS FAILED SENDING 404 ERROR
const promise3 = axios.get(URL3).catch(() => Promise.resolve());  // SUCCESS

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
}).catch((e)=>{ console.log("error",e)});

Таким образом, если запрос Axios не выполнен, сначала попадет в axios.catch , а затем вернет success с любым значением, которое вам нужно.

Вы можете найти больше информации о Цепочке обещаний на MDN Использование цепочки обещаний ( как цепочка после улова ).

Promise.all() не увидит никакого улова, поэтому имейте в виду, что запрос больше не сможет завершиться с ошибкой на Promise.all.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...