2016-06-22 7 views
0

私は反応ネイティブで非常に新しいので、これを完全に間違っている可能性があります。 反応したネイティブドキュメントで提案されているように、私は自分のAsyncStorageにラッパーを使用しています。AsyncStorageが不正な値を返します

  1. を私はAsyncStorage コードのラッパーとして機能ストレージという名前のクラスがあります:

    'use strict'; 
    var React = require('react-native'); 
    var { 
        AsyncStorage 
    } =React; 
    
    module.exports={ 
        store(key,value) 
        { 
         AsyncStorage.setItem(key,value); 
        }, 
        get(key) 
        { 
         return AsyncStorage.getItem(key); 
        }, 
    } 
    
  2. 認証が保存されているキー認証(と値を探し別のクラスを私がやっている何 すでに) コード:

    'use strict'; 
    var React = require('react-native'); 
    
    var Storage=require('./Storage'); 
    module.exports={ 
        authKeyExists() 
        { 
         console.log("IntelliSpend: In Auth::authKeyExists"); 
         var authKeyPromise=Storage.get('auth'); 
         var keyExists=true;  
         authKeyPromise.then((authKey)=>{ 
          console.log('Authkey:'+authKey); 
          if(authKey){ 
          console.log('Authkey exists'); 
          keyExists= true; 
          } 
          else { 
          console.log('Authkey does not exists'); 
          keyExists= false; 
          } 
         }).done();  
         return keyExists; 
        }  
    } 
    

理想的には、キー 'auth'を持つ値として存在するので、 "Authkey exists"を出力し、keyExistsをtrueとして返す必要があります。しかしそれは逆です。

さらにdiagnosys私は、関数authKeyExistsが、約束オブジェクト内のコードが実行される前によく戻ることがわかりました。

私はいくつかの例を見ましたが、それらはすべてScreenコンポーネント自体でAsyncStorageを使用しています(私もそれを試して失敗しました)。私は自分のストレージクラスを使ってAsyncStorageを抽象化したいと思う。私が間違っている箇所を教えてください。

+2

あなたの関数authKeyExistsを()常にtrueを返しますが... プロミス内の関数は非同期で実行され、 'return keyExists'の後に実際に起動します。そのため、keyExistsを設定するロジックには何の効果もありません。 コールバックを使用する必要があります – AllTheTime

+0

回答としてあなたのコメントを受け入ります –

+0

私が言ったことすべてを理解していますか?あなたが好きなら、私は少し詳しく答えてみることができます。 – AllTheTime

答えて

0

あなたの関数authKeyExists()は常にtrueを返します... promise内の関数は非同期で実行され、keyExistsを返した後に実際に起動します。そのため、keyExistsを設定するロジックには何の効果もありません。

authKeyExists(callback) 
{ 
    var keyExists; 
    var authKeyPromise=Storage.get('auth'); 
    authKeyPromise.then((authKey)=>{ 

     if(authKey){ 
     keyExists= true; 
     } 
     else { 
     keyExists= false; 
     } 

     callback(keyExists); 

    }).done();  
}  

あなたは、このように使用することができます:あなたは約束の値を使用したい場合は、コールバックを使用する必要があり

Auth.authKeyExists((keyExists)=> { 

    // do something with keyExists 

}); 
+0

私は答えとしてマークしていますが、完成した機能の使用は何ですか? –

関連する問題