2017-08-06 50 views
0

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

下面是你们一些代码:

  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; 
 
    } 
 
    } 
 
}

  • 下面是我用来检索数据的函数:
  • _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}, 
    

    我只是不明白我在做什么错。这是一个承诺吗?如果是这样,是否有人可以详细说明如何处理?很抱歉,但我很卡与此有一段时间了=(

    回答

    3

    你“读”的方法是异步,引擎盖下返回承诺。

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

    要阅读价值,无论是await的承诺再解决,或者使用.then秒。

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

    我欠你一个啤酒的男人!!感谢您的!这asyncronic编程是新的我...但我学习!感谢您的帮助。 –

    +0

    接受答案已经足够了;) – Andreyco