2015-12-02 166 views
4

Codeflow是 -AsyncStorage.getItem回报:阵营本地

我检查,如果一个条目称为的ListObject存在于AsyncStorage。

  1. 如果它不存在,那么我创建一个对象,添加一些属性并设置存储。我得到的商店为obj,因为我必须在接下来的如果条件进行比较。

  2. 如果列表对象条目已经存在(第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个问题这是同一发出─

  1. 日志的结果。我设置OBJ1并获得了obj中的相同的值(这样我就可以比较下,如果条件)。为什么我不能得到相同的价值,我有

12-03 00:27:56.281 32598-487/com.abc d/ReactNativeJS: 'OBJ1 = { “数据”:{ “isdirty”:真}}'

-12- 03 00:27:56.286 32598-487/com.abc D/ReactNativeJS:'obj = {“_37”:0,“_ 12”:null,“_ 59”:[]}'

  1. 这是上述日志的最终结果。我得到的list.data.isdirty是未定义的。我想这是因为我正在访问的JSON格式不存在于obj即,obj.data.isdirty不存在。那么,我该如何克服这一点?

未定义不是(评价 'list.data.isdirty')的对象;

请告诉我我做错了什么?

+0

obj返回是一个字符串,所以你必须在第二个if之前应用JSON.parse。 – ivillamil

+1

我也试过,它不工作。 – bozzmob

回答

4

我其实将对象从一个复制到另一个。有效。

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

我不是很遵循我所做的全部问题,但是看到使用AsyncStorage的问题。 Async的名字意味着操作是异步的。因此,当您执行getItem(key)时,您应该传入一个回调或使用它返回的Promise对象,就像您在第一行代码中所做的那样。

obj = AsyncStorage.getItem('listobject'); console.log("obj = "+ JSON.stringify(obj));

obj将是无极在这种情况下。

然后,如果您检查obj是否存在数据和isDirty子属性,它们将不存在于Promise上。

+0

如果我是对的,我应该使用obj as - obj.then(function(){code}); – bozzmob

+0

我会更好地解释代码。给我一点时间。 – bozzmob

+0

是的。我用一个普通的对象分配,它的工作。用我的解决方案更新了问题。谢谢 :) – bozzmob