2017-08-06 3 views
0

Je suis un débutant, et j'ai eu un problème: j'ai réussi à stocker des données dans l'appareil en utilisant AsyncStorage. Le truc, c'est que quand j'appelle la méthode read dans mon wrapper, je peux voir que les données sont là, car je me connecte tout dans l'attente. Mais quand j'utilise cela pour faire une requête POST, les données que je reçois de l'autre côté n'ont absolument rien à voir avec ce que j'ai enregistré.Impossible d'obtenir les données stockées avec AsyncStorage

est ici un code pour les gars:

  1. Voici l'emballage que je utilise pour enregistrer et lire les données:

import React, { Component } from 'react'; 
 
import { 
 
    AsyncStorage, 
 
} from 'react-native'; 
 

 
module.exports = { 
 
    save: async function(key, data){ 
 
    //console.log(save key:${key} data:${data} stringify:${JSON.stringify(data)}); 
 
    try { 
 
     await AsyncStorage.setItem(key, JSON.stringify(data)); 
 
     console.log('### STORAGE - Save: Saved key: ' + key + ' with data ' + data) 
 
     return true; 
 
    } catch(err) { 
 
     console.log('### STORAGE - Save: ERROR SAVING ' + key + ':' + data); 
 
     return false; 
 
    } 
 
    }, 
 
    read: async function(key) { 
 
    console.log('### STORAGE - Reading key: ' + key); 
 
    try { 
 
     var data = await AsyncStorage.getItem(key); 
 
     if (data !== null){ 
 
     console.log('### STORAGE - Read result: ' + typeof(JSON.parse(data)) + ' : ' + JSON.parse(data)); 
 
     return JSON.parse(data); 
 
     }else { 
 
     console.log("### STORAGE - Storage.read(): Not found"); 
 
     return false; 
 
     } 
 
    } catch (err) { 
 
     console.log('### STORAGE - Storage.read(): error: ' + err.message); 
 
     return false; 
 
    } 
 
    }, 
 
    empty: function(key){ 
 
    try { 
 
     AsyncStorage.setItem(key, ''); 
 
     //console.log(Storage.empty: cleaning key ${key}); 
 
     return true; 
 
    } catch(err) { 
 
     //console.log(Storage.empty: ERROR ${err}); 
 
     return false; 
 
    } 
 
    } 
 
}

  1. Voici la fonction que j'utilise pour récupérer des données:

_onPressButtonGET() { 
 
    var usuario = storage.read('lastname'); 
 
    return fetch("http://<my api>", { 
 
     method: "POST", 
 
     headers: { 
 
     'Accept': 'application/json', 
 
     'Content-Type': 'application/json', 
 
     }, 
 
     body: JSON.stringify({ 
 
     username: usuario, 
 
     lastname: 'yourOtherValue', 
 
     cellphone: 'cellphone', 
 
     parse: 'parse', 
 
     }) 
 
    }) 
 
    .then((response) => response.json()) 
 
    .then((responseJson) => { 
 
     console.log(responseJson) 
 
     Alert.alert(
 
      "GET Response", 
 
      "EMERGENCY " + JSON.stringify(responseJson['EMERGENCY']) 
 
    ) 
 
    }) 
 
    .catch((error) => { 
 
     console.error(error); 
 
    }); 
 
    } 
 
}

Maintenant, quand je vois les journaux de l'emballage de stockage, je reçois les éléments suivants:

I/ReactNativeJS(15760): ### STORAGE - Reading key: username 
I/ReactNativeJS(15760): ### STORAGE - Read result: string : Federico 

Cela signifie que les données sont là !! =)

Mais, quand je fais la demande POST avec la valeur que je viens de récupérer, c'est ce que je reçois dans les journaux de l'API:

BODY: {u'username': {u'_40': 0, u'_72': None, u'_55': None, u'_65': 0}, 

Je ne peux pas voir ce que je fais mal . Est-ce une promesse? Si tel est le cas, quelqu'un peut-il donner un exemple détaillé sur la façon dont il devrait être géré? Désolé à ce sujet, mais je suis coincé avec cela pour un certain temps maintenant = (

Répondre

3

Votre méthode « lecture » est async, retourne Promise sous le capot.

read: async function(key) { 
    // ... 
}, 

Pour lire la valeur, que ce soit pour await promesse pour résoudre, ou utiliser .then s.

async _onPressButtonGET() { 
    var usuario = await storage.read('lastname'); 
    // ... 
} 
+1

Je vous dois un homme de la bière !! Merci pour ça !! Cette programmation asyncronic est nouveau pour moi ... mais j'apprends! Merci encore pour votre aide. –

+0

C'est assez assez pour accepter la réponse;) – Andreyco