2015-12-02 132 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