gpt4 book ai didi

javascript - 顺序执行axios请求;如果失败尝试数组中的下一个 url,如果成功退出

转载 作者:行者123 更新时间:2023-12-02 22:44:22 25 4
gpt4 key购买 nike

我正在使用一些 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=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))

关于javascript - 顺序执行axios请求;如果失败尝试数组中的下一个 url,如果成功退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com