Javascript 按顺序执行axios请求;如果失败,请尝试阵列中的下一个url,如果成功,请退出
我正在使用一些API获取与JavaScript相关的新闻和文章。如果第一个API请求失败,我想继续下一个请求,以此类推。如果一个请求成功,我想停止所有请求Javascript 按顺序执行axios请求;如果失败,请尝试阵列中的下一个url,如果成功,请退出,javascript,ajax,axios,Javascript,Ajax,Axios,我正在使用一些API获取与JavaScript相关的新闻和文章。如果第一个API请求失败,我想继续下一个请求,以此类推。如果一个请求成功,我想停止所有请求 const apis = [ 'http://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow', 'https://newsapi.org/v2/everything?language=en&q=ja
const apis = [
'http://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow',
'https://newsapi.org/v2/everything?language=en&q=javascript&from=' + formatDate(new Date()) + '&sortBy=publishedAt&apiKey=key',
...
]
我带着这个来的,它很管用,但很可怕:
axios.get('http://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow')
.then(
response => {
console.log(response.data);
const titles = response.data.items.map(t=>{ return { title: t.title, link: t.link }});
setHive(()=>createHiveBackground(titles));
setLoader(false);
}
).catch((e)=>{
console.log(e);
axios.get('https://newsapi.org/v2/everything?language=en&q=javascript&from=' + formatDate(new Date()) + '&sortBy=publishedAt&apiKey=key')
.then(
response => {
console.log(response.data);
const titles = response.data.articles.map(t=>{ return { title: t.title, link: t.url }});
console.log(titles);
setHive(()=>createHiveBackground(titles));
setLoader(false);
}
).catch((e)=>{
setLoader(false);
console.log(e);
});
此外,如果我有许多网址使用它将是一个痛苦。处理此问题的更好方法是什么?您可以使用递归,下面是一个示例:
const apis = [
'http://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow',
'https://newsapi.org/v2/everything?language=en&q=javascript&from=' + formatDate(new Date()) + '&sortBy=publishedAt&apiKey=key',
...
]
function getFirstValid(arr, index) {
return axios
.get(arr[index])
.catch((e) => {
if (index < arr.length - 1) {
return getFirstValid(arr, index + 1);
}
throw e;
});
}
getFirstValid(apis, 0)
.then(response => console.log(response))
.catch(e => console.error('none are valid', e))