Как правильно использовать обещание в методе AsyncStorage.getItem? - PullRequest
0 голосов
/ 23 октября 2018

Я пытался получить значение в AsyncStorage с помощью метода getItem ().

Я создал один навигатор-переключатель.что выглядит следующим образом.

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>
    );
  }
}

Итак, изначально я проверяю значение userToken из AsyncStorage.если он есть, я перехожу в приложение.Если его там нет, я перехожу к экрану входа.

Поведение приложения должно быть таким, как указано выше.

Но когда приложение загружается, оно всегда застревает на AuthLoadingScreen.Я попытался отладить код, в котором я выбираю userToken из asyncstorage, но мне странно, что управление переходит к функции _promiseHandling, но после этого оно не входит в , а затем или catch блок.Я сослался на 5-6 примеров, чтобы прочитать значение из асинхронного хранилища и обработать его обещание.

Я даже попробовал следующий способ, но он у меня не работает. React Native AsyncStorage getItem возвращает обещание, а не значение

async _getStorageValue(){
  var value = await AsyncStorage.getItem('ITEM_NAME')
  return value
}

В чем может быть причина этого?

1 Ответ

0 голосов
/ 23 октября 2018

Попробуйте это.

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, прежде чем вы сможете его вызвать.

Если проблема не устранена, опубликуйте ошибку здесь.

...