React Native - 如果我尝试获取字符串,AsyncStorage会返回null

时间:2017-07-21 18:10:50

标签: javascript react-native null setstate asyncstorage

我正在使用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”,我无法弄清楚如何解决它。 提前感谢您的回答。

5 个答案:

答案 0 :(得分:2)

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

尝试:

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

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

这应该提醒您的数据。

答案 1 :(得分:0)

AsyncStorage.getItem返回一个promise,因此将在- debug: msg: "{{item | join ()}}" with_cartesian: - ['A', 'B'] - ['1', '2'] - ['a','b','c','d'] 的回调中解析。这意味着您的下一行then将在解析承诺之前执行。

如果您的var dataObjects=require("../JsonLists/"+this.state.promessa)方法中需要then,则应将该行放在dataObjects回调中,并设置默认初始值。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

async myMethode() {
AsyncStorage.getItem("").then((value)=>alert(value));

}

尝试这样。调用所需的方法

答案 4 :(得分: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.
}