【发布时间】:2021-10-05 01:43:00
【问题描述】:
目前我正在获取一些数据并通过useState 保存响应。响应已保存,但问题是在保存状态之前进行第二次获取,使该值变为undefined。
我试着这样做:
useEffect(() => {
fetchTrackingData().finally(() => {
console.log("Destination", destination.coordinates);
fetchDriverLocation().finally(() => {
setLoading(false);
});
});
}, []);
基本上fetchTrackingData 函数具有我保存的目标坐标:
const [destination, setDestination] = useState('');
在fetchTrackingData 函数中,我在收到响应后设置状态。在fetchTrackingData 完成获取并保存destination 的状态后,我使用finally() 方法,然后调用第二个获取fetchDriverLocation 但它有destination 未定义,甚至我登录查看该值是否在finally() 之后保存,但日志中也是undefined。
如何将来自一个 API 的值存储在该 API 调用中,然后在另一个 API 调用中使用该值?
【问题讨论】:
-
您确定
fetchTrackingData返回数据并按预期设置数据吗?即使是这样,setDestination也会异步运行,因此您不能确定它在调用fetchDriverLocation之前运行。我认为您将需要重新考虑如何实现此逻辑。不幸的是,我不确定到底是怎么回事,但是在 stackoverflow 上进行一些搜索可能有助于找到正确的模式。 -
是的,它返回数据,我可以记录该数据并设置数据,因为我在其他地方使用了其中一个设置值,它会显示出来。
-
那么我认为这是
setDestination的异步特性。没有立即设置目标,导致错误(奇怪的是,当您将默认设置为''时,它是未定义的)。你能显示fetchTrackingData的代码吗? -
发生这种情况是因为我正在利用
destination.coordinates但如果我只是 console.logdestination它不会显示未定义