Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更好的方法使用axios获得2个API结果?_Javascript_Reactjs_Api_Redux_Axios - Fatal编程技术网

Javascript 有没有更好的方法使用axios获得2个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

我正在创建一个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_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中使用显示的代码可能会成为问题。