使用Axios发送多个请求的查询-React

时间:2019-11-01 07:29:15

标签: javascript node.js axios

在某些情况下,我需要使用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成功,而服务2失败,在这种情况下,承诺链断开并抛出错误。在[response_1 , null, response_3]这样的情况下,我将需要输出。您能指导我如何实现这一目标吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

我的猜测是,您应该手动实现,方法是在捕获上返回Promise.resolve()

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 ,然后返回具有所需值的成功

您可以在MDN Using Promises Chaining上找到有关 Promise链接的更多信息(类似于捕获后的链接)。

Promise.all()不会发现任何陷阱,因此请记住,这些请求将不再能够在Promise.all上失败