Javascript 异步等待而不是等待执行
我的部分应用程序使用Javascript 异步等待而不是等待执行,javascript,reactjs,react-native,redux,async-await,Javascript,Reactjs,React Native,Redux,Async Await,我的部分应用程序使用decSubPassword更新状态subPassword,然后将此状态传递给函数changePassword,该函数在其他上下文中更改状态。我将sendData设置为在按下按钮时运行。当我按下一次按钮时,通过分析日志,我可以看到子密码并没有改变,这意味着decSubPassword函数并没有更新我的状态。然而,当我第二次(在短时间内)按下按钮时,状态会立即更新。这向我表明,存在一些同步问题,并且应用程序不会等到执行decSubPassword。我尝试使sendData函数异
decSubPassword
更新状态subPassword
,然后将此状态传递给函数changePassword
,该函数在其他上下文中更改状态。我将sendData设置为在按下按钮时运行。当我按下一次按钮时,通过分析日志,我可以看到子密码并没有改变,这意味着decSubPassword函数并没有更新我的状态。然而,当我第二次(在短时间内)按下按钮时,状态会立即更新。这向我表明,存在一些同步问题,并且应用程序不会等到执行decSubPassword
。我尝试使sendData
函数异步,并在decSubPassword
中添加了wait,如下所示,但它没有解决我的问题
const sendData = async (id) => {
await decSubPassword({ id, secretKey });
changePassword(subPassword);
changeId(id);
changeUsername(username);
changeDomain(domain);
changeDescription(description);
console.log({ subPassword });
console.log(subPassword);
};
子密码函数
const decSubPassword = (dispatch) => async ({ id, secretKey }) => {
const response = await trackerApi.get("/api/password/" + id + "/");
const responsePassword = response.data.password;
const decPassword = decryptRecord(responsePassword, secretKey);
dispatch({ type: "dec_sub_password", payload: decPassword });
};
decSubPassword
不是异步函数。您将其定义为decSubPassword=(dispatch)=>async({id,secretKey})=>{…}
,即返回异步函数的常规函数,因此wait decSubPassword()
无需等待。也许你可以试试decSubPassword=async({id,secretKey})=>{…}
?你把你的,应该是:consthunkaction=(args)=>async(dispatch,getState)=>
soconstdecsubpassword=({id,secretKey})=>async(dispatch)
。不确定如何从组件中分派decSubPassword,是否使用connect或useDispatch,以及问题中为什么缺少该代码?