React Native AsyncStorage.getItem返回未定义

时间:2019-05-19 12:09:51

标签: javascript react-native asyncstorage

免责声明:第一次使用AsyncStorage仍在学习RN。

因此,我试图在AsyncStorage中存储“项目”对象的数组。用户可以创建“项目”对象,它们最终应显示在另一个屏幕上的FlatList(或类似组件)中。

例如:

itemArray = [
{
    keywords: "box",
    size: "medium",
    color: "black",
},
{
    keywords: "pillow",
    size: "large",
    color: "white",
}]

当用户填写文本输入框并点击添加时,我调用了一个函数addItem,该函数从存储中检索当前的itemArray,并为另一个item对象添加值的形式。但是,似乎从调用返回的res变量是未定义的。

storeData函数仅调用AsyncStorage.setItem()。

我得到的错误是:TypeError: Cannot read property 'data' of undefined

这是我的代码:

addItem = async () => {
        try {
            const res = await AsyncStorage.getItem('itemArray')
                .then(req => JSON.parse(req))
                .then(json => console.log(json));
            // Item array is populated, append to it
            if(res !== null) {
                console.log(res);    // Outputs undefined
                var itemArray = res.data;

                itemArray.push({"keywords": this.state.keywords, "color": this.state.color, "size": this.state.size});
                storeData(array);
            }
            // Item array is not populated, initialize and append
            else {
                console.log(res);    // Outputs undefined
                var itemArray = new Array();
                itemArray.push({"keywords": this.state.keywords, "color": this.state.color, "size": this.state.size});
                storeData(itemArray);
            }
        } catch(e) {
            // error reading value
            console.log(e);    // Outputs TypeError: Cannot read property 'data' of undefined
        }
    }

getItem函数是否在做错事情?

编辑:这是我的storeData函数,因为它可能是错误的来源:

storeData = async (itemArray) => {
        try {
            var itemData = {
                data: itemArray,
            };
            console.log(itemData);
            await AsyncStorage.setItem('itemArray', JSON.stringify(itemData))
            console.log('success!');
        } catch (e) {
            // saving error
        }
}

2 个答案:

答案 0 :(得分:0)

您可以使用Async - wait语法...或then ... catch ...您不能同时使用它们

addItem = async () => {
  const res = await AsyncStorage.getItem('itemArray');

  // do something with your res
  const resArr = JSON.parse(res);
  // ...
};

答案 1 :(得分:0)

如果使用“等待”,则无需使用“然后”功能。

相反:

const res = await AsyncStorage.getItem('itemArray')
.then(req => JSON.parse(req))
.then(json => console.log(json));

执行此操作:

const res = await AsyncStorage.getItem('itemArray');
const parsed = JSON.parse(res);

现在,您可以使用'parsed'变量访问其中的数据:

console.log(parsed.data); // should get you your data...