0

我正在使用 AsyncStorage,我需要将存储到“facoltà”中的值保存到调用 this.setState 的“promessa”中。我写了那个代码:

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

5 回答 5

2

ComponentWillMount 将不会在构造函数中的 setItem Promise 之后完成 getItem Promise。

尝试 :

componentWillMount(){
 AsyncStorage.setItem("facoltà",PROFS.json)
}

render(){
...
  AsyncStorage.getItem("facoltà").then((value)=>alert(value));
...
}

这应该提醒您的数据。

于 2018-03-05T10:06:51.363 回答
0

使用异步/等待。

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.
}
于 2019-06-15T23:06:03.647 回答
0

AsyncStorage.getItem 返回一个承诺,因此将在回调中使用then. 这意味着您的下一行在var dataObjects=require("../JsonLists/"+this.state.promessa)承诺解决之前执行。

如果您需要立即在方法中使用,您应该将该行放在then回调中并具有默认初始值。dataObjectscomponentWillMount

于 2017-07-21T18:17:01.877 回答
0

我认为这是一个时间问题。您正在使用带有 .then 的 promise,它在 var dataObjects 尝试要求它之后设置状态。

您是否尝试过将 var dataObjects 放在 .then 代码中?

于 2017-07-21T18:17:12.020 回答
0
async myMethode() {
AsyncStorage.getItem("").then((value)=>alert(value));

}

像这样尝试。在需要的地方调用方法

于 2018-03-05T10:48:49.513 回答