2
votes

Supprimer l'élément du stockage asynchrone ne fonctionne pas

J'ai le code ci-dessous dans l'écran de déconnexion

const userToken = AsyncStorage.getItem('userToken'), this.props.navigation.navigate(userToken ? 'App' : 'SignIn'); 

Sur l'écran de démarrage, je vérifie comme ceci

const userToken = AsyncStorage.getItem('userToken').then(() => {
        this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
    });

Après la déconnexion Sa redirection vers signer -in, mais lorsque j'ouvre à nouveau l'application, l'écran de démarrage passe à l'application plutôt qu'à la connexion

Mon code initial était comme

 await AsyncStorage.removeItem('userToken').then(()=>{
      setTimeout(() => {
        this.props.navigation.navigate('SignIn');
      }, 3000);

Ce que je suis faire du mal. S'il vous plaît aviser.

Merci


2 commentaires

tant que vous utilisez wait ... il n'y a pas besoin de puis


Oui, j'essaye de l'exécuter quand même


5 Réponses :


1
votes

Vous oubliez le paramètre de rappel,

const userToken = AsyncStorage.getItem('userToken').then((userToken) => {
        this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
    });


9 commentaires

est-ce vraiment nécessaire, si je n'ai rien à faire avec userToken


alors comment vas-tu vérifier? la valeur retournée n'est pas définie ou contient une chaîne?


Mon code réel était comme const userToken = AsyncStorage.getItem ('userToken'), this.props.navigation.navigate (userToken? 'App': 'SignIn');


Il n'est donc pas défini, il devrait donc être redirigé vers la connexion


oui maintenant vous êtes arrivé au bon point, faites-le attendre et cela fonctionnera.


J'ai essayé ça, mais ça ne fonctionnait pas


avez-vous essayé de consigner la valeur de userToken? ce que ça donne?


Ça donne toujours un objet


eh bien, nous ne pouvons définir que des valeurs de chaîne dans le stockage asynchrone ... vous devez donc enregistrer JSON.stringify (userToken) avec await et voir ce qu'il imprime



2
votes

Avez-vous vérifié le résultat des données Async?

Par exemple:

Sur l'écran de démarrage

AsyncStorage.getItem("userToken").then(value => {
      if(value) {
       let token = JSON.parse(value);
       this.props.navigation.navigate(token ? 'App' : 'SignIn');
      } else {
       this.props.navigation.navigate('SignIn');
      }
    });


3 commentaires

Je n'ai pas besoin du résultat des données


Ok, mais vous pouvez vérifier s'il apparaît ou non. Sur la base de ce statut, vous pouvez naviguer.


que ce soit indéfini



0
votes

J'ai implémenté la même fonctionnalité que celle-ci

async logout() {
    await AsyncStorage.clear();
    Actions.SignIn(); // for navigating back to sign in screen if using router flux
    this.props.navigation.navigate("SignIn"); // if using react-navigation
 }


0 commentaires

0
votes

Veuillez vérifier le fichier AndroidManifest.xml et remplacer android: allwoBackup = ture par android: allwoBackup = false . J'espère que cela fonctionnera. Lorsque la sauvegarde est vraie, elle sauvegarde toujours les informations de connexion.


0 commentaires

0
votes

Si quelqu'un est encore confus ou trouve la solution ici

​​Alors voici la solution:

const userToken = await AsyncStorage.getItem('userToken').then(() => {
    this.props.navigation.navigate(userToken ? 'App' : 'SignIn');
});

Il suffit d'ajouter wait lorsque vous êtes obtenir une valeur de clé depuis AsyncStorage

J'ai aussi eu ce problème BTW.


0 commentaires