在 AsyncStorage.getItem 方法中使用 promise 的正确方法是什么?
what is the correct way to use promise in AsyncStorage.getItem method?
我一直在尝试使用 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 的值。如果它在那里,我正在导航到应用程序。如果它不存在,那么我将导航到登录屏幕。
应用行为应如上。
但是当应用加载时,它总是停留在AuthLoadingScreen。我试图调试我从异步存储中获取 userToken 的代码,但对我来说很奇怪,控制将转到函数 _promiseHandling 但之后它不会进入 then 或 赶上块。
我参考了 5-6 个示例来从异步存储中读取值并处理它的承诺。
我什至尝试了以下方法,但它仍然不适合我。
async _getStorageValue(){
var value = await AsyncStorage.getItem('ITEM_NAME')
return value
}
这背后的原因是什么?
试试这个。
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
道具,然后才能调用它。
如果问题仍然存在,post这里的错误。
我一直在尝试使用 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 的值。如果它在那里,我正在导航到应用程序。如果它不存在,那么我将导航到登录屏幕。
应用行为应如上。
但是当应用加载时,它总是停留在AuthLoadingScreen。我试图调试我从异步存储中获取 userToken 的代码,但对我来说很奇怪,控制将转到函数 _promiseHandling 但之后它不会进入 then 或 赶上块。 我参考了 5-6 个示例来从异步存储中读取值并处理它的承诺。
我什至尝试了以下方法,但它仍然不适合我。
async _getStorageValue(){
var value = await AsyncStorage.getItem('ITEM_NAME')
return value
}
这背后的原因是什么?
试试这个。
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
道具,然后才能调用它。
如果问题仍然存在,post这里的错误。