私は反応ネイティブで非常に新しく、これを完全に間違っている可能性があります。反応ネイティブ ドキュメントで提案されているように、AsyncStorage のラッパーを使用しています。私がやっていること:
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); }, }
別のクラス 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 を抽象化したいと考えています。どこが間違っているのか教えてください。