Javascript 如果第二个api调用需要使用react钩子从第一个api调用结果中获取特定数据,如何获取序列api调用?

Javascript 如果第二个api调用需要使用react钩子从第一个api调用结果中获取特定数据,如何获取序列api调用?,javascript,reactjs,Javascript,Reactjs,当我进行第一次api调用时,我得到包含所有赛车信息的json数据。然后,当我进行第二次api调用以检索相应单个驱动程序的信息时,我需要api端点中的driverId。因此,我尝试从第一个api调用的结果映射driverId,但随后出现错误。我试图展示所有有匹配司机的赛车(例如Porsher和sally,因为他们都有相同的id)。我怎样才能达到这个结果 import React,{useState,useffect}来自“React”; 从“axios”导入axios; 导入“./styles.c

当我进行第一次api调用时,我得到包含所有赛车信息的json数据。然后,当我进行第二次api调用以检索相应单个驱动程序的信息时,我需要api端点中的driverId。因此,我尝试从第一个api调用的结果映射driverId,但随后出现错误。我试图展示所有有匹配司机的赛车(例如Porsher和sally,因为他们都有相同的id)。我怎样才能达到这个结果

import React,{useState,useffect}来自“React”;
从“axios”导入axios;
导入“./styles.css”;
常量应用=()=>{
const[raceCarData,setRaceCarData]=useState({carData:null,driverData:null});
常数赛车=[
{'car':'porsche','description':'luxury','driverId':4},
{'car':'ferari','description':'beatiful','driverId':2},
{'car':'bmw','description':'slow','driverId':5}
]
/*
https://github.com/racedrivers/4 =>{'name':'sally','gender':'female','id':4}
https://github.com/racedrivers/2 =>{'name':'john','gender':'male','id':2},
https://github.com/racedrivers/5 =>{'name':'tyffany','gender':'female','id':5},
*/
useffect(()=>{
const getRaceCarData=async()=>{
const cars=等待axios.get(“https://github.com/raceCars");
汽车.数据.地图((分辨率)=>{
const drivers=等待axios.get(
`https://github.com/racedrivers/${res.driverId}`
);
})
setRaceCarData({carData:cars.data,driverData:drivers.data});
};
getRaceCarData();
}, []);
返回(
{raceCardata.carData.map((value)=>value.car}
{raceCardata.driverData.map((value)=>value.name}
);
}
导出默认应用程序;

我认为Promise.allSettled或Promise.all会对您有所帮助。请阅读有关这些方法的文档。您可以将Promise与异步函数一起使用

const drivers = await Promise.allSettled(cars.data.map(res => axios.get(`https://github.com/racedrivers/${res.driverId}`)));

您应该调用驱动程序并行信息。类似于以下内容:

useffect(()=>{
const getRaceCarData=async()=>{
const cars=等待axios.get(“https://github.com/raceCars");
const driversData=wait Promise.all(cars.data.map)(异步(res)=>{
const drivers=等待axios.get(
`https://github.com/racedrivers/${res.driverId}`
);
返回驱动程序数据;
}));
setRaceCarData({carData:cars.data,driverData:driversData});
};
getRaceCarData();
}, []);

这是否回答了您的问题?不,因为在那篇文章中,来自的数据只返回一个数据,而我的初始api端点返回了大量数据。这个答案很有帮助。谢谢!虽然这种方法可行,但它给了我额外的不必要的值,如值:“已完成”然后把我想要的数据放在深嵌套的对象中。但是很高兴知道。谢谢!
const drivers = await Promise.allSettled(cars.data.map(res => axios.get(`https://github.com/racedrivers/${res.driverId}`)));