3
votes

Comment utiliser async / await pour récupérer la valeur d'AsyncStorage dans React Native à l'aide de la fonction

J'ai créé prefsManager.js - Utilisé pour stocker et récupérer des données d'AsyncStorage mais j'ai rencontré un problème comme lorsque le journal d'impression, il retourne toujours non défini car il est Async mais je veux imprimer la valeur réelle dans un journal par le appel de la fonction.

_handlePress() {

        await prefsManager.setValue(prefskey.username, this.state.username)

        console.log("username =>>", await prefsManager.getValue(prefskey.username)); 

     }

J'ai utilisé ceci dans mon Home.js lorsque j'appuie sur le bouton J'appelle cette méthode.

import { AsyncStorage } from 'react-native';
import prefskey from '../utils/constants/prefskeys';

const setValue = async (key, value) => {
    await AsyncStorage.setItem(key, value);
}

const getValue = async (key) => {
    let value = '';
    try {
        value = await AsyncStorage.getItem(key) || 'none';
    } catch (error) {
        // Error retrieving data 
        console.log(error.message);
    }
    return value;
};

const prefsmanager = {
    setValue,
    getValue
}
export default prefsmanager; 

p >


0 commentaires

3 Réponses :


4
votes

Vous devez utiliser le mot-clé async sur votre fonction comme ceci.

_handlePress = () => {
        prefsManager.setValue(prefskey.username, this.state.username)

        console.log("username =>>" , prefsManager.getValue(prefskey.username));

     }

fonction d'appel

    import { AsyncStorage } from 'react-native';
import prefskey from '../utils/constants/prefskeys';

const prefsnamager = {

    setValue: function (key, value) {
        AsyncStorage.setItem(key, value)
    },

    getValue: async (key) => {
        let value = '';
        try {
            value = await AsyncStorage.getItem(key) || 'none';
        } catch (error) {
            // Error retrieving data
            console.log(error.message);
        }
        return value;
    }
}
export default prefsnamager;


6 commentaires

Je ne veux pas écrire dans chaque écran, j'appelle simplement la fonction de la classe prefsmanager et renvoie la valeur que j'ai passée la clé comme argument.


Vous pouvez utiliser cette fonction dans la classe prefsmanager, ajoutez simplement la clé d'argument dans la fonction et appelez-la n'importe où. J'ai mis à jour ma réponse précédente Veuillez jeter un œil


Cela me donne une erreur de syntaxe, il n'y a pas de mot clé de fonction.


J'ai essayé mais il imprime comme 'username = >>', {_40: 0, _65: 0, _55: null, _72: null} dans le journal.


Vous n'avez pas besoin du mot-clé "function" lorsque vous utilisez la fonction de grosse flèche dans la fonction getValue et vous devez passer un argument "key" dans la fonction getValue comme getValue = async (key) => et vous avez besoin pour modifier et mettre à jour cette ligne avec cette valeur = attendre AsyncStorage.getItem (clé) || 'aucun';


continuons cette discussion dans le chat .



2
votes
  1. Définir la valeur dans le stockage
  2. constructor(props) {
        super(props)       
    
        this.state = {};
        let self=this;
    
        //this function is called everytime , when you visit this screen.
        this.__didFocusSubscription = this.props.navigation.addListener('didFocus',payload => {
            AsyncStorage.getItem('data').then((value)=>{
                if(value==null){
                    self.setState({count:'no data found'})
                }
                else{
                    self.setState({count:value})
                }
            })
        });       
    }
    
    1. Tirer parti du stockage
    AsyncStorage.setItem('data','Read Data')
    

2 commentaires

Je veux cela dans un fichier séparé et je veux appeler à partir de là plutôt que de définir dans chaque écran.


J'ai créé prefsnamager.js et dans ce fichier, j'ai défini les méthodes Getter et Setter of AsyncStorage et je veux appeler la fonction à partir de là en important prefsnamager.js dans mon home.js et appeler la fonction de prefsnamager.js pour définir et obtenir la valeur de préférence.



2
votes

En fait, c'est comme localStorage sur le Web, mais avec une petite différence. en obtenant l'élément, il agit de manière asynchrone. faites attention à ci-dessous:

AsyncStorage.getItem('key')
  .then( value => console.log(value) );

Mais pour l'obtenir, c'est comme ci-dessous:

AsyncStorage.setItem('key', value);


2 commentaires

Pouvons-nous prendre le rappel à partir de là et le mettre dans notre écran?


Cher @VishalPatoliya ツ, qu'est-ce que cela signifie prendre le rappel ? dans puis , vous pouvez passer une fonction de rappel et faire tout ce que vous voulez. et à l'intérieur de catch , vous pouvez passer la fonction de secours, puis tout ce que vous voulez.