私のアプリケーションの永続状態として機能するオブジェクトを作成しようとしています。これは、アプリケーションの起動後に初めて状態が参照されることを意味し、AsyncStorageから状態オブジェクトをロードする必要があります。これまでのところ私はこれまで何を得ているのですか:AsyncStorageで永続的なアプリケーション状態をインスタンス化します。
var instance = null;
var State = {
user: "bob",
update(newState) {
Object.assign(instance, newState);
AsyncStorage.setItem('appState', JSON.stringify(instance)).then(() => {
AsyncStorage.getItem('appState', (err, result) => {
console.log(result)
})
})
}
}
module.exports = (() => {
if (!instance) {
return AsyncStorage.getItem('appState').then((value) => {
if (value) {
instance = value
console.log("assigning saved state")
} else {
instance = State
console.log("assigning fresh state")
AsyncStorage.setItem('appState', JSON.stringify(instance))
}
return instance
})
} else {
console.log("using existing state")
return instance
}
})();
これは私が試してみると約束しています。約束からオブジェクト価値を引き出す方法はありますか、それとも私がやろうとしていることを達成するためのよりよいパターンですか?おそらく、起動時にStateを初期化する必要があります。
実際には、ストアが初期化されると起動するストレージのコールバック/約束にスタートアップを移動します。そうすれば、アプリロジックでヘアを分割する必要はありません。起動コードを2つの部分に分割する必要があります:状態なしと状態付き... – dandavis
正確に約束からオブジェクトを抽出したいですか?あなたはすでに 'インスタンス'を返しています。したがって、then()を実行すると、インスタンス値が取得されます。私が見ている問題は、インスタンスが既に設定されている場合、それを直接返すことです。関数が一貫しているように、常に約束を返すべきです。 – carlosdubusm
@dandavis:あなたは何を意味するのか分かりません。 –