0

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

这里有一些代码给你们:

  1. 这是我用来保存和读取数据的包装器:

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. 这是我用来检索数据的函数:

  _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},

我只是看不出我做错了什么。这是一个承诺吗?如果是这样,有人可以详细说明应该如何处理它吗?对此感到抱歉,但我现在坚持了一段时间=(

4

1 回答 1

3

您的“读取”方法是异步的,在后台返回 Promise。

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

读取值,无论await是为了解决,还是使用.thens.

async _onPressButtonGET() {
  var usuario = await storage.read('lastname');
  // ...
}
于 2017-08-06T11:57:47.313 回答