在AsyncStorage.getItem方法中使用promise的正确方法是什么?

时间:2018-10-23 06:36:03

标签: react-native promise react-navigation asyncstorage

我一直在尝试使用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
}

这可能是什么原因?

1 个答案:

答案 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 道具,然后才能调用它。

如果问题仍然存在,请在此处发布错误。