免责声明:第一次使用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
}
}
答案 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...