AsyncStorage.getItem returns 未定义:React Native
AsyncStorage.getItem returns undefined : React Native
Codeflow 是-
我正在检查 AsyncStorage 中是否存在名为 listobject 的条目。
如果它不存在,那么,我创建一个对象,添加一些属性并设置商店。我将商店转到 obj,因为我必须在下一个 if 条件下进行比较。
如果listobject条目已经存在(第2次),则直接来到第2块,进行比较。 (我在第一步中获得 obj 值的原因是因为我可以有一个共同的 obj.data.isdirty 条件。
这是我的代码-
AsyncStorage.getItem('listobject').then((obj) => {
if(obj == undefined)
{
var obj1 ={};
obj1.data ={};
obj1.data.isdirty = true;
console.log("obj1 = "+ JSON.stringify(obj1));
AsyncStorage.setItem('listobject',obj1);
obj = AsyncStorage.getItem('listobject');
console.log("obj = "+ JSON.stringify(obj));
}
if(obj.data.isdirty)
{
obj.data.isdirty = false;
AsyncStorage.setItem('listobject',JSON.stringify(obj));
return AsyncStorage.getItem('listobject');
}
}).done();
我有 2 个问题,它们是同一问题的结果-
- 日志。我正在设置 obj1 并为 obj 获取相同的值(以便我可以比较下一个 if 条件)。为什么我无法 get 与 set 相同的值?
12-03 00:27:56.281 32598-487/com.abc D/ReactNativeJS: 'obj1 = {"data":{"isdirty":true}}'
12-03 00:27:56.286 32598-487/com.abc D/ReactNativeJS: 'obj = {"_37":0,"_12":null,"_59":[]}'
- 这是上述日志的最终结果。我发现 list.data.isdirty 未定义。我猜是因为我正在访问的 JSON 格式在 obj 中不存在,即 obj.data.isdirty 不存在。那么,我该如何克服呢?
undefined is not an object (evaluating 'list.data.isdirty');
请告诉我我做错了什么?
我没有完全理解我提出的整个问题,但是发现使用 AsyncStorage 存在问题。顾名思义,异步意味着操作是异步的。因此,当您执行 getItem(key) 时,您应该传入回调或使用 Promise 对象 returns,就像您在第一行代码中所做的那样。
obj = AsyncStorage.getItem('listobject');
console.log("obj = "+ JSON.stringify(obj));
在这种情况下,obj
将成为 Promise。
然后,如果您检查 obj 是否存在数据和 isDirty 子项 属性,它们将不存在于 Promise 中。
我实际上把对象从一个复制到另一个。成功了。
AsyncStorage.getItem('listobject').then((obj) => {
if(obj == undefined)
{
var obj1 ={};
obj1.data ={};
obj1.data.isdirty = true;
console.log("obj1 = "+ JSON.stringify(obj1));
AsyncStorage.setItem('listobject',obj1);
obj = obj1; //THIS IS WHAT I DID!
console.log("obj = "+ JSON.stringify(obj));
}
if(obj.data.isdirty)
{
obj.data.isdirty = false;
AsyncStorage.setItem('listobject',JSON.stringify(obj));
return AsyncStorage.getItem('listobject');
}
}).done();
Codeflow 是-
我正在检查 AsyncStorage 中是否存在名为 listobject 的条目。
如果它不存在,那么,我创建一个对象,添加一些属性并设置商店。我将商店转到 obj,因为我必须在下一个 if 条件下进行比较。
如果listobject条目已经存在(第2次),则直接来到第2块,进行比较。 (我在第一步中获得 obj 值的原因是因为我可以有一个共同的 obj.data.isdirty 条件。
这是我的代码-
AsyncStorage.getItem('listobject').then((obj) => {
if(obj == undefined)
{
var obj1 ={};
obj1.data ={};
obj1.data.isdirty = true;
console.log("obj1 = "+ JSON.stringify(obj1));
AsyncStorage.setItem('listobject',obj1);
obj = AsyncStorage.getItem('listobject');
console.log("obj = "+ JSON.stringify(obj));
}
if(obj.data.isdirty)
{
obj.data.isdirty = false;
AsyncStorage.setItem('listobject',JSON.stringify(obj));
return AsyncStorage.getItem('listobject');
}
}).done();
我有 2 个问题,它们是同一问题的结果-
- 日志。我正在设置 obj1 并为 obj 获取相同的值(以便我可以比较下一个 if 条件)。为什么我无法 get 与 set 相同的值?
12-03 00:27:56.281 32598-487/com.abc D/ReactNativeJS: 'obj1 = {"data":{"isdirty":true}}'
12-03 00:27:56.286 32598-487/com.abc D/ReactNativeJS: 'obj = {"_37":0,"_12":null,"_59":[]}'
- 这是上述日志的最终结果。我发现 list.data.isdirty 未定义。我猜是因为我正在访问的 JSON 格式在 obj 中不存在,即 obj.data.isdirty 不存在。那么,我该如何克服呢?
undefined is not an object (evaluating 'list.data.isdirty');
请告诉我我做错了什么?
我没有完全理解我提出的整个问题,但是发现使用 AsyncStorage 存在问题。顾名思义,异步意味着操作是异步的。因此,当您执行 getItem(key) 时,您应该传入回调或使用 Promise 对象 returns,就像您在第一行代码中所做的那样。
obj = AsyncStorage.getItem('listobject');
console.log("obj = "+ JSON.stringify(obj));
obj
将成为 Promise。
然后,如果您检查 obj 是否存在数据和 isDirty 子项 属性,它们将不存在于 Promise 中。
我实际上把对象从一个复制到另一个。成功了。
AsyncStorage.getItem('listobject').then((obj) => {
if(obj == undefined)
{
var obj1 ={};
obj1.data ={};
obj1.data.isdirty = true;
console.log("obj1 = "+ JSON.stringify(obj1));
AsyncStorage.setItem('listobject',obj1);
obj = obj1; //THIS IS WHAT I DID!
console.log("obj = "+ JSON.stringify(obj));
}
if(obj.data.isdirty)
{
obj.data.isdirty = false;
AsyncStorage.setItem('listobject',JSON.stringify(obj));
return AsyncStorage.getItem('listobject');
}
}).done();