1

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

  1. AsyncStorage コードのラッパーとして機能する Storage という名前のクラスがあります。

    '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. 別のクラス Auth は、キー auth (既に保存されている) コードで値を探します。

    '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 として返す必要があります。しかし、それは反対に起こります。

authKeyExistsさらに診断すると、 promise オブジェクト内のコードが実行されるかなり前に関数が返されることがわかりました。

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

4

1 に答える 1