在提交点击我发送一个POST请求与一些数据到服务器,作为响应,我得到一个对象与id和超时. 然后我需要设置超时,并在时间到来时为数据发送GET请求。问题是数据还没有准备好,我得到未定义,我的React应用程序崩溃。
我被告知超时应该只从第一个请求开始(我的意思是我不能手动增加它或做这样的事情:timeout * 2
,我需要只从第一个请求使用超时)。我该怎么做呢?我认为它可以以某种方式与While循环…但我不够聪明,写不出这些代码。请帮助
const [someData, setSomeData] = useState({}) // here comes undefined and app crashes because this object renders in DOM
const getData = async (id) => {
const response = await fetch(`$BASE_URL/${id}`)
setSomeData(response)
}
const onSubmit = async (data) => {
const { id, timeout } = await fetch(url, data)
setTimeOut(() => {
getData(id) // data is not ready and I get undefined
}, timeout) // its around 1000ms and I can't change it mannually
}
如果我这样做,那么一切都正常
const getData = async (id) => {
const response = await fetch(`$BASE_URL/${id}`)
setSomeData(response)
}
const onSubmit = async (data) => {
const { id, timeout } = await fetch(url, data)
setTimeOut(() => {
getData(id)
}, 6000) // if I manually specify timeout to 6000
}
fetch将返回一个promise,您可以使用它来getData。
const onSubmit = async (data) => {
fetch(url, data)
.then(res => return res.json())
.then(res => getData(res.id))
}