私は反応ネイティブで非常に新しいので、これを完全に間違っている可能性があります。 反応したネイティブドキュメントで提案されているように、私は自分のAsyncStorageにラッパーを使用しています。AsyncStorageが不正な値を返します
を私は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); }, }
認証が保存されているキー認証(と値を探し別のクラスを私がやっている何 すでに) コード:
'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を抽象化したいと思う。私が間違っている箇所を教えてください。
あなたの関数authKeyExistsを()常にtrueを返しますが... プロミス内の関数は非同期で実行され、 'return keyExists'の後に実際に起動します。そのため、keyExistsを設定するロジックには何の効果もありません。 コールバックを使用する必要があります – AllTheTime
回答としてあなたのコメントを受け入ります –
私が言ったことすべてを理解していますか?あなたが好きなら、私は少し詳しく答えてみることができます。 – AllTheTime