【发布时间】:2020-02-10 08:44:56
【问题描述】:
第二个 useEffect 块在第一个接收到任何数据之前运行。这会导致第二个块返回一个错误和一个空数组。
我尝试过使用 async/await,因为它过去曾为我解决过类似的问题。不过这里好像没什么效果。
const [session, setSession] = useState("");
const [champions, setChampions] = useState([]);
useEffect(() => {
axios.get(`http://api.paladins.com/paladinsapi.svc/createsessionJson/${devId}/${generateSignature('createsession')}/${moment.utc().format('YYYYMMDDHHmmss')}`).then((response) => {
setSession(response.data.session_id);
console.log(session);
}).catch((error) => {
console.log(error);
})
}, [])
useEffect(() => {
axios.get(`http://api.paladins.com/paladinsapi.svc/getchampionsJson/${devId}/${generateSignature('getchampions')}/${session}/${moment.utc().format('YYYYMMDDHHmmss')}/1`).then((response) => {
setChampions(response.data);
console.log(champions);
}).catch((error) => {
console.log(error);
})
}, []);
它应该向冠军返回一个对象数组,但由于它没有收到会话 id,因此 api 调用不是将冠军保持为空数组的正确地址。
【问题讨论】:
-
useEffect(可能)或 axious.get(肯定)是异步函数。谷歌了解它在 JavaScript 中的含义。通常你需要第一次调用它,然后在回调中进行第二次调用,比如 axious.get(oneCall).success(() => {axiouse.get(... etc.
-
这给了我一个错误提示“.success 不是函数”。
标签: javascript ajax reactjs axios