Javascript 有没有更好的方法使用axios获得2个API结果?
我正在创建一个ReactJS应用程序,但我遇到了一个问题:我从1个api获得了结果,如下所示:Javascript 有没有更好的方法使用axios获得2个API结果?,javascript,reactjs,api,redux,axios,Javascript,Reactjs,Api,Redux,Axios,我正在创建一个ReactJS应用程序,但我遇到了一个问题:我从1个api获得了结果,如下所示: const perPage = 20; const offset = (page * perPage) - perPage; const res = await axios.get(`https://pokeapi.co/api/v2/pokemon?limit=${perPage}&offset=${offset}`); https://pokeapi.co/api/v2/PASS_HER
const perPage = 20;
const offset = (page * perPage) - perPage;
const res = await axios.get(`https://pokeapi.co/api/v2/pokemon?limit=${perPage}&offset=${offset}`);
https://pokeapi.co/api/v2/PASS_HERE_POKEMON_ID
通过上面的例子,我可以返回很多口袋妖怪
它返回给我一个带有口袋妖怪id和口袋妖怪名称的对象。还有另一个API链接,它提供了许多其他信息,如以下内容:
const perPage = 20;
const offset = (page * perPage) - perPage;
const res = await axios.get(`https://pokeapi.co/api/v2/pokemon?limit=${perPage}&offset=${offset}`);
https://pokeapi.co/api/v2/PASS_HERE_POKEMON_ID
它一次只带来一个结果,但是有很多信息
我的问题是:我该怎么做?我应该使用第二个API并进行循环(我认为这不是最好的情况),还是有办法获得20个口袋妖怪(例如),并在第二个API中传递它们的id,但使用axios、promises或其他最佳选项?一种可能的方法是:
const getPokemon=(id)=>axios.get(`https://pokeapi.co/api/v2/${id}`);
const getPokemons=async(每页,偏移量)=>{
const{pokemons}=wait axios.get(`https://pokeapi.co/api/v2/pokemon?limit=${perPage}&offset=${offset}`);
Promise.all(pokemons.map(pok=>getPokemon(pok.id)))
然后(结果=>{
//包含每个调用的响应的数组
});
更多关于
Promise的信息。所有大多数HTTP API在某种程度上都有速率限制。因此,使用所示的方法可能会有很大的问题。一方面,它增加了被阻止的风险,并且在您返回速率限制错误时很难恢复。@t.niese@PatrickRoberts API本身没有速率限制帐户,但他们仍然测量每个IP和时间范围的请求数。这也是非常流行的。[…]不遵守合理使用政策的人将永久禁止其IP地址。
。他们明确表示应该缓存结果,他们提供的客户端库也会这样做。pokemons.map(pok=>getPokemon(pok.id))
并行发出请求,浏览器通常将每个域的请求限制在2-6个左右,因此可能不会出现问题。但是在nodejs中使用显示的代码可能会成为问题。