React Native - AsyncStorage возвращает мне ноль, если я пытаюсь получить строку
Я работаю с AsyncStorage, мне нужно получить значение, сохраненное в "facoltà" и сохранить его в "promessa", вызывая this.setState. Я написал этот код:
constructor(props){
super(props)
AsyncStorage.setItem("facoltà","PROFS.json")
}
componentWillMount(){
AsyncStorage.getItem("facoltà").then((value)=>
{
console.log(value); // the console returns me PROFS.json so I thought it was working
this.setState({promessa:value})
}):
var dataObjects=require("../JsonLists/"+this.state.promessa) // but here this.state.promessa returns me null
}
проблема в том, что this.state.promessa возвращает мне "null" вместо "PROFS.json", и я не могу понять, как это решить. Заранее спасибо за ваши ответы.
4 ответа
ComponentWillMount не будет завершать обещание getItem после выполнения обещания setItem в конструкторе.
пытаться:
componentWillMount(){
AsyncStorage.setItem("facoltà",PROFS.json)
}
render(){
...
AsyncStorage.getItem("facoltà").then((value)=>alert(value));
...
}
это должно предупредить ваши данные.
Использование Async/Await.
async componentDidMount () {
try {
const item = await this.someMethodAsync();
} catch (e) {
console.log("Error getting item", e);
}
}
async someMethodAsync () {
try {
let item = AsyncStorage.getItem("foo");
console.log(item);
catch (e) {
throw e;
}
return item; // Could be any value, including null.
}
AsyncStorage.getItem возвращает обещание, поэтому будет решено в обратном вызове с then
, Это означает, что ваша следующая строка var dataObjects=require("../JsonLists/"+this.state.promessa)
выполняется до того, как обещание будет выполнено.
Вы должны поставить линию в пределах then
обратный вызов и иметь начальное значение по умолчанию, если вам нужно dataObjects
сразу в вашем componentWillMount
метод.
async myMethode() {
AsyncStorage.getItem("").then((value)=>alert(value));
}
попробуйте вот так. Вызовите метод, где это требуется
Я думаю, что это проблема времени. Вы используете обещание с.then, который устанавливает состояние после того, как var dataObjects пытается его запросить.
Вы пытались поместить переменные dataObjects в ваш код.then?