我一直在尝试使用getItem()方法在AsyncStorage中获取值。
我创建了一个开关导航器。如下。
export const AuthNavigator = createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen, // Loading screen
App:DrawerNavigator, //screens with drawer navigator
Auth: AuthStack, // login screen
},
{
initialRouteName: 'AuthLoading',
}
);
我已将 AuthLoading 设置为初始路径。下面是我的AuthLoadingScreen代码。
export default class AuthLoadingScreen extends React.Component {
constructor(props) {
super(props);
this._promiseHandling();
}
_promiseHandling = () => {
AsyncStorage.getItem("userToken").then((value) => {
console.log(value);
if(value!=undefined){
this.props.navigation.navigate("App");
}
else{
this.props.navigation.navigate("Auth");
}
})
.catch(res => {
console.log(res);
});
}
// Render any loading content that you like here
render() {
return (
<View style={styles.container}>
<ActivityIndicator />
<StatusBar barStyle="default" />
</View>
);
}
}
因此,最初,我正在从AsyncStorage中检查userToken的值。如果它在那里,我导航到App。如果不存在,那么我将导航至登录屏幕。
应用行为应如上所述。
但是在加载应用程序时,它始终停留在AuthLoadingScreen。我尝试调试从异步存储中获取userToken的代码,但对我来说奇怪的是,控制权转到了_promiseHandling函数,但之后却没有进入 then 或 catch 块。 我已引用5-6个示例从异步存储中读取值并处理其诺言。
我什至尝试了以下方法,但仍然对我不起作用。 React Native AsyncStorage getItem returns promise not value
async _getStorageValue(){
var value = await AsyncStorage.getItem('ITEM_NAME')
return value
}
这可能是什么原因?
答案 0 :(得分:0)
尝试一下。
export default class AuthLoadingScreen extends React.Component {
constructor(props) {
super(props);
this._promiseHandling();
}
_promiseHandling = async () => {
try {
const token = await AsyncStorage.getItem('userToken');
if (token)
this.props.navigation.navigate("App");
else
this.props.navigation.navigate("Auth");
} catch (error) {
console.log(error);
}
}
// Render
}
在使用AsyncStorage
之前,请确保已正确导入AuthLoadingScreen
,并且可以访问设备存储。另外,请确保您的navigation
已收到RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install msodbcsql17
RUN ACCEPT_EULA=Y apt-get install mssql-tools
RUN apt-get update
道具,然后才能调用它。
如果问题仍然存在,请在此处发布错误。