Я пытаюсь создать объект, который будет служить постоянным состоянием моего приложения. Это означает, что при первом запуске приложения указано состояние первого времени, ему нужно загрузить объект состояния из 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 при запуске.
Я бы перевел запуск на обратный вызов/обещание на хранилище, которое запускается после инициализации хранилища. Таким образом, вам не нужно разделить волосы в логике приложений. что может включать разделение кода запуска на две части: без состояния и состояния ... – dandavis
Где именно вы хотите извлечь объект из обещания? Вы уже возвращаете «экземпляр». Поэтому, если вы будете следовать с помощью then(), вы получите значение экземпляра. Проблема, которую я вижу, заключается в том, что если экземпляр уже установлен, вы возвращаете его напрямую. Вы всегда должны возвращать обещание, чтобы функция была последовательной. – carlosdubusm
@ dandavis: Я не уверен, что вы имеете в виду, не могли бы вы привести пример? –