Reactjs 反应:等待承诺
我得到了一个使用axios从后端获取信息的函数,如下所示:Reactjs 反应:等待承诺,reactjs,promise,react-hooks,use-state,Reactjs,Promise,React Hooks,Use State,我得到了一个使用axios从后端获取信息的函数,如下所示: const getDoH = async () => { const user = JSON.parse(localStorage.getItem("user")); let config = { headers: { "Content-Type": "application/json", Authorizati
const getDoH = async () => {
const user = JSON.parse(localStorage.getItem("user"));
let config = {
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + user.accessToken,
},
params: {
username: user.username,
},
};
return await axios.get(API_URL + "get", config);
};
现在我想在initiate上将这些值保存到一个全局变量中,所以我使用initialstate钩子,如下所示:
const [initialValues, setInitialValues] = useState(() => {
const initialSwitchState = getDoH().then(
(response) => {
setInitialValues(response.data);
},
(error) => {
console.log(error);
}
);
return initialSwitchState;
});
const setStartValues = () => {
let newValues = initialSwitchState;
let valueArray = Object.entries(newValues).map((v, index) => {
v[1] = initialValues.switchValues[index]
return v
});
newValues = Object.fromEntries(valueArray);
setValues({...newValues});
}
const [values, setValues] = useState(() => {
const initialState = setStartValues();}
之后,我得到了一个函数,它从db中获取值并将它们映射到我的局部变量,该函数如下所示:
const [initialValues, setInitialValues] = useState(() => {
const initialSwitchState = getDoH().then(
(response) => {
setInitialValues(response.data);
},
(error) => {
console.log(error);
}
);
return initialSwitchState;
});
const setStartValues = () => {
let newValues = initialSwitchState;
let valueArray = Object.entries(newValues).map((v, index) => {
v[1] = initialValues.switchValues[index]
return v
});
newValues = Object.fromEntries(valueArray);
setValues({...newValues});
}
const [values, setValues] = useState(() => {
const initialState = setStartValues();}
我想用另一个initialstate钩子调用这个函数,比如:
const [initialValues, setInitialValues] = useState(() => {
const initialSwitchState = getDoH().then(
(response) => {
setInitialValues(response.data);
},
(error) => {
console.log(error);
}
);
return initialSwitchState;
});
const setStartValues = () => {
let newValues = initialSwitchState;
let valueArray = Object.entries(newValues).map((v, index) => {
v[1] = initialValues.switchValues[index]
return v
});
newValues = Object.fromEntries(valueArray);
setValues({...newValues});
}
const [values, setValues] = useState(() => {
const initialState = setStartValues();}
但当它到达终点时:
v[1] = initialValues.switchValues[index]
初始值仍然是一个承诺。我看不出哪里出了问题,因为我使用了async并等待我的初始getDoH()函数。
在我尝试使用结果之前,我如何解决这个问题(等待承诺)?
亲切问候。这里有两个问题: 首先,您需要等待getDoH(),因为这是一个异步函数
其次,
useState()
是一个同步函数,所以在设置const[initialValues,setInitialValues]=…
之前,您需要在useffect()
中执行wait getDoH()
,它有自己的一系列问题。发现最好的方法是:
const [values, setValues] = useState(async () => {
const initialState = await getDoH().then(
(response) => {
let newValues = switchState;
let valueArray = Object.entries(newValues).map((v, index) => {
v[1] = response.data.switchValues[index]
return v
});
newValues = Object.fromEntries(valueArray);
setValues({...newValues});
},
(error) => {
console.log(error);
}
);
return initialState;
});