Reactjs 反应:等待承诺

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

我得到了一个使用axios从后端获取信息的函数,如下所示:

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;
  });