Javascript AsyncStorage.getItem返回未定义(即使使用.then和.parse)

Javascript AsyncStorage.getItem返回未定义(即使使用.then和.parse),javascript,react-native,asyncstorage,Javascript,React Native,Asyncstorage,我正在尝试将数据存储在异步存储中并将其加载回(显然)。setItem函数起作用,当我调用它时,通知会在iOS模拟器的底部弹出。但是,.getItem函数不起作用,当I console.log它时,返回undefined。我有两个函数来存储和获取数据: setData = (rawDataToStore, keyToStore) => { data_store = JSON.stringify(rawDataToStore); AsyncStorage

我正在尝试将数据存储在异步存储中并将其加载回(显然)。setItem函数起作用,当我调用它时,通知会在iOS模拟器的底部弹出。但是,.getItem函数不起作用,当I console.log它时,返回
undefined
。我有两个函数来存储和获取数据:

    setData = (rawDataToStore, keyToStore) => {
        data_store = JSON.stringify(rawDataToStore);
        AsyncStorage.setItem(keyToStore, data_store, () => {
            console.warn('Stored data!')
        } )
    }

    getData = (keyToSearch) => {
        AsyncStorage.getItem(keyToSearch).then(storage => {
            parsed_data = JSON.parse(storage);
            return parsed_data
        }).catch(e => console.warn(e))
    }
我刚刚测试了render()中的函数:

要保存数据,请执行以下操作:

this.setData({value: 1}, "test_data");
console.log(this.getData("test_data"));
要加载数据,请执行以下操作:

this.setData({value: 1}, "test_data");
console.log(this.getData("test_data"));
console.log只返回未定义的值


我对异步存储完全陌生,但我做错了什么?

您的
控制台。log
返回
未定义的
。。。因为,您的
setData
函数尚未完成其工作。。。您必须首先等待它,因为它是一个异步操作

class YourComponent extends React.Component {
  async componentDidMount() {
    await this.setData();
    const data = await this.getData();

    console.log('data returned', data);
  }

  setData = async (rawDataToStore, keyToStore) => {
    data_store = JSON.stringify(rawDataToStore);
    await AsyncStorage.setItem(keyToStore, data_store);
  };

  getData = async keyToSearch => {
    let parsed_data = null;

    const storage = await AsyncStorage.getItem(keyToSearch);
    if (storage) {
      parsed_data = JSON.parse(storage);
      console.log('Data in AsyncStorage: ', parsed_data);
    }

    return parsed_data;
  };
}

一旦
返回AsyncStorage.getItem…..
你的
getData
函数就没有返回(then callback中的那一个不算在内),你的下一个问题将是“它为什么返回承诺”-因为这就是
AsyncStorage.getItem
返回的,一个Promise@Robert根据你链接的帖子,带块的箭头函数需要显式返回
getData
将返回
undefined
@Robert-你错了,看看