getItem返回未定义的:React Native

vngu2lb8  于 2022-11-17  发布在  React
关注(0)|答案(3)|浏览(209)

代码流是-
我正在检查AsyncStorage中是否存在名为listobject的条目。
1.如果它不存在,那么,我创建一个对象,添加一些属性,并设置存储。我把存储到obj,因为我必须在下一个if条件中进行比较。
1.如果listobject条目已经存在(第二次),那么,它直接进入第二个块,并进行比较。(我在第一步中获得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();

我有两个问题是同一个问题的结果-
1.日志。我正在设置obj 1并为obj获取相同的值(这样我就可以比较下一个if条件)。为什么我不能获取与我设置的值相同的值?
这com.abc。'obj 1 = {“数据”:{“脏”:真}}'
这com.abc。'对象= {"_37”:0,"_12”:空,"_59”:[]}'
1.这是上述日志的最终结果。我正在获取该列表。data.isdirty未定义。我猜这是因为我正在访问的JSON格式在obj中不存在,即obj.data.isdirty不存在。那么,我如何克服这个问题呢?
undefined不是一个对象(求值为'list.data. isdirty');
请告诉我我做错了什么?

lb3vh1jj

lb3vh1jj1#

我实际上把对象从一个复制到另一个。它工作了。

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();
jmo0nnb3

jmo0nnb32#

我没有完全理解整个问题,但是我确实看到了使用AsyncStorage的问题。从名字上看,Async意味着操作是异步的。所以当你执行getItem(key)时,你应该传入一个回调函数,或者像第一行代码中所做的那样使用它返回的Promise对象。
obj = AsyncStorage.getItem('listobject'); console.log("obj = "+ JSON.stringify(obj));
obj将是本例中的Promise。
然后,如果您检查obj上是否存在数据和isDirty子属性,则它们将不会存在于Promise上。

ego6inou

ego6inou3#

有时,在执行console.log(AsyncStorage.getItem('Soomekey'))时,您将获得undefined,因为您无法直接从AsyncStorage提取值,因为返回了一个承诺,因此您应该编写以下内容

const SomeFunction = async () => {
    try {
      const value = await AsyncStorage.getItem('somekey');
      console.log(value);
    } catch (err) {
      console.log(err);
    }
  }

相关问题