无法使用AsyncStorage获取数据

时间:2017-08-06 11:44:32

标签: react-native react-native-android asyncstorage

我是新手,我想出了一个问题:我已经设法使用AsyncStorage将数据存储在设备中。问题是,当我在包装器中调用read方法时,我可以看到数据存在,因为我记录了await中的所有内容。但是,当我使用它来发出POST请求时,我在另一方获得的数据与我保存的内容完全无关。

以下是你们的一些代码:

  1. 这是我用来保存和读取数据的包装器:
  2. 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. 这是我用来检索数据的函数:
    2.   _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);
          });
        }
      }

      现在,当我从存储包装器中看到日志时,我得到以下信息:

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

      这意味着数据就在那里!! =)

      但是,当我使用刚刚恢复的值发出POST请求时,这就是我在API日志中得到的结果:

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

      我只是看不出我做错了什么。这是一个承诺吗?如果是这样,有人可以给出一个关于如何处理它的详细例子吗?对此抱歉,但我现在坚持了一段时间=(

1 个答案:

答案 0 :(得分:3)

你的“阅读”方法是异步的,在引擎盖下返回Promise。

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

要读取值,可以使用await来解析承诺,也可以使用.then

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