在某些情况下,我需要使用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]
这样的情况下,我将需要输出。您能指导我如何实现这一目标吗?预先感谢。
答案 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
上失败。