Multithreading 异步函数react native的问题

Multithreading 异步函数react native的问题,multithreading,react-native,redux,promise,Multithreading,React Native,Redux,Promise,我需要在呈现模板之前获取一些数据,我尝试了两种不同的方法,但都失败了 这是第一个同步事务: if (loginData) { loginGet(userData!.cpf, loginData.access_token) .then((data: UserAzureInterface) => { console.log(JSON.stringify(data)); dispatchUserAzureSuccess(data, dispat

我需要在呈现模板之前获取一些数据,我尝试了两种不同的方法,但都失败了

这是第一个同步事务:

if (loginData) {
    loginGet(userData!.cpf, loginData.access_token)
      .then((data: UserAzureInterface) => {
        console.log(JSON.stringify(data));
        dispatchUserAzureSuccess(data, dispatch);
      })
      .catch(_error => {});
  } else {
    navigation.navigate('Login');
  }

return (
    <>
      <ProfileIndexTemplate onSubmit={onSubmit} userData={userData} />
    </>
  );
const getLoginAzure = async () => {
    if (loginData) {
      const loginAzureData = await loginGet(
        userData!.cpf,
        loginData.access_token,
      );
      console.log(JSON.stringify(loginAzureData));
      dispatchUserAzureSuccess(loginAzureData, dispatch);
    }
  };

  getLoginAzure();

return (
    <>
      <ProfileIndexTemplate onSubmit={onSubmit} userData={userData} />
    </>
  );

我能看到错误,但我不知道如何解决。有人能帮我吗?

我明白了!为了解决这个问题,我做了以下工作:

 useEffect(() => {
    console.log(`gettingAzure: ${userData!.cpf}`);

    if (!loginData) {
      navigation.navigate('Login');
    } else {
      loginGet(userData!.cpf, loginData!.access_token)
        .then((data: UserAzureInterface) => {
          console.log(JSON.stringify(data));
          dispatchUserAzureSuccess(data, dispatch);
        })
        .catch(_error => {});
    }
  }, []);

  if (azurePending || !azureData) {
    return <LoadingModal />;
  }

  return (
    <ProfileIndexTemplate
      onSubmit={onSubmit}
      userData={userData}
      loginAzure={azureData}
    />
  );

useffect(()=>{
log(`gettingAzure:${userData!.cpf}`);
如果(!loginda){
导航。导航('Login');
}否则{
登录设置(userData!.cpf,loginda!.access\u令牌)
.然后((数据:UserAzureInterface)=>{
log(JSON.stringify(data));
dispatchUserAzureSuccess(数据、调度);
})
.catch(_error=>{});
}
}, []);
如果(azurePending | |!azureData){
返回;
}
返回(
);

您可以将提取逻辑调用到
构造函数
方法中。正如您在React Native Lifecycle方法中所看到的,
constructor
总是在render方法之前调用。谢谢兄弟,您是对的!
 useEffect(() => {
    console.log(`gettingAzure: ${userData!.cpf}`);

    if (!loginData) {
      navigation.navigate('Login');
    } else {
      loginGet(userData!.cpf, loginData!.access_token)
        .then((data: UserAzureInterface) => {
          console.log(JSON.stringify(data));
          dispatchUserAzureSuccess(data, dispatch);
        })
        .catch(_error => {});
    }
  }, []);

  if (azurePending || !azureData) {
    return <LoadingModal />;
  }

  return (
    <ProfileIndexTemplate
      onSubmit={onSubmit}
      userData={userData}
      loginAzure={azureData}
    />
  );