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?

Другие вопросы по тегам